我对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
答案 0 :(得分:0)
您已将子选项别名为p
,而GROUP BY
引用c.
,an.
等等。这些都不是有效的别名 - 只有p.
。
此外,您无法返回*
,因为从子选择中d.*
返回的列不属于GROUP BY
。您需要以某种方式聚合这些(COUNT
,SUM
等。)
所以你需要:
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