2013-10-11 7 views
1

t_user_master, t_product_master 및 t_transaction이라는 SQL 서버에 3 개의 테이블을 만들었습니다. t_user_master는 Users_id 열을 통해 t_transaction에 연결되고 t _product_master는 t_transaction과 연결되지만 Products_id.Now는 users_name (t_user_master에서), Product_name (t_product_master에서)과 연결되어 어떤 제품이 어떤 순서로 사용되었는지 확인합니다. 내가 구문에 관련된 모든 오류를 recitified했지만 지금은 그것을 실행 다른 problem.After에 직면하고 나는이 메시지가 무엇입니까 칼 럼 't_product_master.Cost_Per_Item가'잘못된잘못된 구문을 사용하는 이유는 무엇입니까?

SELECT um.Users_Name, 
     pm.Product_Name, 
     (SELECT SUM(Transaction_Amount) 
     FROM t_transaction 
     WHERE Transaction_Type = 'Order' 
     GROUP BY Users_Id, 
        Product_Id) AS Ordered_quantity, 
     (SELECT SUM(Transaction_Amount) 
     FROM t_transaction 
     WHERE Transaction_Type = 'Payment' 
     GROUP BY Users_ID, 
        Product_Id) AS Amount_Paid, 
     (SELECT MAX(Transaction_Date) 
     FROM t_transaction 
     GROUP BY Users_Id, 
        Product_Id) AS Last_Transaction_Date, 
     (SELECT ((SUM(Transaction_Amount) * pm.Cost_per_Item) - SUM(Transaction_Amount)))AS Balance 
     FROM t_user_master um 
       JOIN t_transaction tr 
       ON um.Users_ID = tr.Users_ID 
       JOIN t_product_master pm 
       ON tr.Product_ID = pm.Product_ID 
    GROUP BY um.Users_Name,pm.Product_Name 

여기 내 코드 코드의 조각이다 선택 목록에는 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에 표시됩니다. 어디서 잘못 가고 있습니까? 최소한

+0

정확한 오류를 알려 주실 수 있습니까? 'xxx' 근처의 잘못된 구문 –

+0

@ChrisL L 정확한 오류 메시지 102, 수준 15, 상태 1, 줄 80 'Product_Name '근처의 구문이 잘못되었습니다. .. 여기 라인은 마지막 라인으로 80 점을 – user2718073

답변

0

당신이 ","이 라인의 끝이 누락 :

GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date 
0

당신은 LastTransactionDate 후 쉼표와 SELECT 외모의 마지막 열을 놓치고, 부정하는, 즉

(SELECT ((SUM(Transaction_Amount)*pm.Cost_per_Item)-SUM(Transaction_Amount)) AS Balance 
+0

오류를 정정 후에도, 그 여전히 같은 오류를주는. Ordered_quantity' AS 여러 행을 반환합니다 – user2718073

+0

하위 조회뿐만 아니라 문제가'(TRANSACTION_TYPE = '주문'Users_Id BY GROUP, PRODUCT_ID는 WHERE) ( t_transaction FROM을 TRANSACTION_AMOUNT을 SUM을 선택). 하위 쿼리에서는 사용할 수 없습니다. 쿼리를 다시 작성해야합니다. –

1

당신은 Last_Transaction_Date 후 ","10 라인과의 끝에 ")을"놓쳤다. 이 시도 :

SELECT um.Users_Name,pm.Product_Name, 
(SELECT SUM(Transaction_Amount) 
FROM  t_transaction 
WHERE Transaction_Type='Order' 
GROUP BY Users_Id,Product_Id 
) AS Ordered_quantity, 
(SELECT SUM(Transaction_Amount) 
FROM  t_transaction 
WHERE Transaction_Type='Payment' 
GROUP BY Users_ID,Product_Id 
) AS Amount_Paid, 
(SELECT MAX(Transaction_Date) 
FROM  t_transaction 
GROUP BY Users_Id,Product_Id 
) AS Last_Transaction_Date, 
(SELECT ((SUM(Transaction_Amount)*pm.Cost_per_Item) - SUM(Transaction_Amount)) 
) AS Balance 
FROM  t_user_master um 
JOIN  t_transaction tr ON um.Users_ID=tr.Users_ID 
JOIN  t_product_master pm ON tr.Product_ID = pm.Product_ID 

GROUP BY um.Users_Name,pm.Product_Name 
0

조회의 세 가지 문제 실제로 있습니다 Last_Transaction_Date 후

  1. 누락 된 쉼표가.
  2. 잔액을 선택하는 동안 괄호 끝.
  3. 잔액을 계산할 때 pm.Cost_per_Item을 사용했습니다. GROUP BY를 수행하면 모든 select 문 열은 결과로 그룹화 된 행에 대해 계산됩니다. 나는 합계를 사용했지만 필요에 따라 다른 집계 함수를 사용할 수 있습니다.

올바른 쿼리는 다음과 같습니다이 도움이

SELECT um.Users_Name, 
    pm.Product_Name, 
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Order' 
    GROUP BY Users_Id,Product_Id) AS Ordered_quantity, 
    (SELECT SUM(Transaction_Amount) FROM t_transaction 
    WHERE Transaction_Type='Payment' 
    GROUP BY Users_ID,Product_Id)AS Amount_Paid, 
    (SELECT MAX(Transaction_Date) FROM t_transaction 
     GROUP BY Users_Id,Product_Id) AS Last_Transaction_Date, -- error 1 
    (SELECT ((SUM(Transaction_Amount)* sum(pm.Cost_per_Item))-SUM(Transaction_Amount))) AS 
     Balance -- error 2 and error 3 
FROM t_user_master um 
JOIN t_transaction tr ON um.Users_ID=tr.Users_ID 
JOIN t_product_master pm ON tr.Product_ID = pm.Product_ID 
GROUP BY um.Users_Name,pm.Product_Name ; 

희망!

+0

@deepshika 세 번째 오류와 관련하여 변경 한 내용은 알 수 없습니다. – user2718073

+0

t_product_master.Cost_per_Item 값을 사용하여 잔액을 받으려면. 올바른 결과를 얻으려면 스칼라 값으로 집계해야합니다 (예 : 요구 사항에 따라 최대, 합계, 최소값 사용). – Deepshikha

관련 문제