无法绑定多部分标识符 - GROUP BY

时间:2017-02-15 15:01:52

标签: sql-server

我对SQL很新。我有这个代码,没有最后的GROUP BY行。有了它,我收到multi-part identifier could not be bound.我需要的GROUP BY L1_DESC, L2_DESC and L3_DESC,但无法确定将其放在代码中的位置。

SELECT * FROM (
SELECT d.*
,c.COL_DESC
--,v.VAL_N
,an.CUST_ACCT_NBR
,s.L1_DESC, s.L2_DESC, s.L3_DESC
FROM dbo.ECL_SEG101_DATA d
INNER JOIN (
SELECT SITE_ID
,max(SRC_BATCH_ID) AS SRC_BATCH_ID
FROM dbo.ECL_SEG101_DATA d
WHERE SRC_ID = 'K12'
GROUP BY SITE_ID) d1
       ON d1.SRC_BATCH_ID = d.SRC_BATCH_ID
       AND d1.SITE_ID = d.SITE_ID
INNER JOIN dbo.ECL_SEG002_EXT_DATA_VAR v
       ON d.SRC_BATCH_ID = v.LIST_ID
       AND d.SRC_REC_ID = v.ROW_ID
LEFT OUTER JOIN dbo.INS_REF006_ACCT an
          ON d.SITE_ID = an.LOC_KEY
INNER JOIN dbo.ECL_SEG101_SEGMENT s
      ON d.SITE_SEG_LVLS_ID = s.LVLS_ID
INNER JOIN dbo.ECL_SEG002_EXT_COL c
       ON v.COL_ID = c.COL_ID
WHERE d.Site_Data_Ord = '1') p
GROUP BY c.COL_DESC, an.CUST_ACCT_NBR, s.L1_DESC, s.L2_DESC, s.L3_DESC

1 个答案:

答案 0 :(得分:0)

您已将子选项别名为p,而GROUP BY引用c.an.等等。这些都不是有效的别名 - 只有p.

此外,您无法返回*,因为从子选择中d.*返回的列不属于GROUP BY。您需要以某种方式聚合这些(COUNTSUM等。)

所以你需要:

SELECT p.COL_DESC, p.CUST_ACCT_NBR, p.L1_DESC, p.L2_DESC, p.L3_DESC 
--, SOME_AGGREGATE_FUNCTION()
FROM (
    SELECT d.*
    ,c.COL_DESC
    --,v.VAL_N
    ,an.CUST_ACCT_NBR
    ,s.L1_DESC, s.L2_DESC, s.L3_DESC
    FROM dbo.ECL_SEG101_DATA d
    INNER JOIN (
        SELECT SITE_ID
        ,max(SRC_BATCH_ID) AS SRC_BATCH_ID
        FROM dbo.ECL_SEG101_DATA d
        WHERE SRC_ID = 'K12'
        GROUP BY SITE_ID) d1
    ON d1.SRC_BATCH_ID = d.SRC_BATCH_ID
    AND d1.SITE_ID = d.SITE_ID
    INNER JOIN dbo.ECL_SEG002_EXT_DATA_VAR v
    ON d.SRC_BATCH_ID = v.LIST_ID
    AND d.SRC_REC_ID = v.ROW_ID
    LEFT OUTER JOIN dbo.INS_REF006_ACCT an
    ON d.SITE_ID = an.LOC_KEY
    INNER JOIN dbo.ECL_SEG101_SEGMENT s
    ON d.SITE_SEG_LVLS_ID = s.LVLS_ID
    INNER JOIN dbo.ECL_SEG002_EXT_COL c
    ON v.COL_ID = c.COL_ID
    WHERE d.Site_Data_Ord = '1') p
GROUP BY p.COL_DESC, p.CUST_ACCT_NBR, p.L1_DESC, p.L2_DESC, p.L3_DESC