2015-11-05 63 views
0

我有幾個AA和left join,所以我想補充/合併這sql我的其他查詢中:如何使用此SQL語句執行左側子查詢或子查詢?

SELECT 
    A.ID 
FROM 
    Table1 as A 
LEFT JOIN 
    (SELECT 
     T.ID, T.TRF_TAKEN, 
     SUM(CASE WHEN CAST([UNT_TRNSFER] AS FLOAT) = 0 
        THEN CAST([TRF_TAKEN] AS FLOAT) 
        ELSE ISNULL([UNT_TRNSFER], 0) 
      END) AS 'UNT_TRNSFER' 
    FROM TRNS_C as T 
    GROUP BY ID;) ON A.ID = TransfC.ID 
WHERE 
    A.ID = 1; 

ERROR

列「TRNS_C.TRF_TAKEN」在選擇列表中,因爲無效它不包含在聚合函數或GROUP BY子句中。

回答

1

GROUP BY ID;)刪除;,加T.TRF_TAKENGROUP BY條款並添加表的別名Transfc,你加入了。

SELECT A.ID, Transfc.UNT_TRNSFER 
FROM Table1 AS A 
LEFT JOIN (
    SELECT T.ID, T.TRF_TAKEN, 
      SUM(CASE WHEN CAST([UNT_TRNSFER] AS FLOAT) = 0 THEN CAST([TRF_TAKEN] AS FLOAT) 
      ELSE ISNULL([UNT_TRNSFER], 0) END) AS 'UNT_TRNSFER' 
      FROM TRNS_C as T 
      GROUP BY T.ID, T.TRF_TAKEN 
) Transfc 
ON A.ID = TransfC.ID 
WHERE A.ID = 1; 
+0

問題是,我沒有看到「UNT_TRNSFER」列甚至不是空的 –

+0

@AMaduro thats因爲你沒有在'SELECT'語句中指定該列。看我更新的回答 –

+0

BoOOomm !!! ...你是對的!謝謝你 –

1

你只需要把你的非聚合字段放到GROUP BY中。您正在要求它按EMPLID進行分組,但您只選擇了t.ID和t.TRF_Taken。

select A.ID 
from Table1 as A 

LEFT JOIN (
    SELECT T.ID, T.TRF_TAKEN, 
      SUM(CASE WHEN CAST([UNT_TRNSFER] AS FLOAT) = 0 THEN CAST([TRF_TAKEN] AS FLOAT) ELSE ISNULL([UNT_TRNSFER], 0) END) AS 'UNT_TRNSFER' 
      FROM TRNS_C as T 
      GROUP BY T.ID, T.TRF_TAKEN; 
    ) Transfc 
ON A.ID = TransfC.ID 
    Where A.ID = 1; 
+0

它是id不是emplid –

+0

我提供的代碼仍應解決您的問題。 – dfundako

+0

沒有工作=/.. –

0

作爲一個說明,在你的問題查詢大約相當於:

SELECT A.ID 
FROM Table1 A 
WHERE A.ID = 1; 

left join可能做的是乘以行數的唯一的事情。這似乎不太可取。