2015-11-05 76 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可能做的是乘以行数的唯一的事情。这似乎不太可取。