我正在尝试合并两个查询以显示前5个客户代码,但我一直收到错误SQLSTATE 42601
。
理想情况下,我希望查询显示类似的内容。
LTIHONIA CLIENT 1 1330
LITHOINA CLIENT 2 1300
LITHONIA CLIENT 3 1000
ATHENS CLIENT 1 1330
ATHENS CLIENT 2 1000
ATHENS CLIENT 3 400
SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE FROM AR_SUM AR, TLORDER WHERE AGING_DATE >= '1/1/2016' AND AR.BILL_NUMBER = TLORDER.BILL_NUMBER
AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE1'
GROUP BY CLIENT_ID
ORDER BY REVENUE DESC
FETCH FIRST 5 ROWS ONLY
UNION
SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE FROM AR_SUM AR, TLORDER WHERE AGING_DATE >= '1/1/2016' AND AR.BILL_NUMBER = TLORDER.BILL_NUMBER
AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE10'
GROUP BY CLIENT_ID
ORDER BY REVENUE DESC
FETCH FIRST 5 ROWS ONLY
答案 0 :(得分:0)
尝试在子查询周围使用括号:
(SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE
FROM AR_SUM AR JOIN
TLORDER
ON AR.BILL_NUMBER = TLORDER.BILL_NUMBER
WHERE AGING_DATE >= '1/1/2016' AND CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE1'
GROUP BY CLIENT_ID
ORDER BY REVENUE DESC
FETCH FIRST 5 ROWS ONLY
) UNION
(SELECT 'LITHONIA' AS TYPE, CLIENT_ID, ROUND(DEC(SUM(ORIG_AMT)),2) AS REVENUE
FROM AR_SUM AR JOIN
TLORDER
ON AR.BILL_NUMBER = TLORDER.BILL_NUMBER
WHERE AGING_DATE >= '1/1/2016' AND
CURRENT_STATUS IN ('BILLD','EDIBILLED') AND ORIG_AMT > 0 AND AR.SITE_ID = 'SITE10'
GROUP BY CLIENT_ID
ORDER BY REVENUE DESC
FETCH FIRST 5 ROWS ONLY
)
此外,您应该学会使用正确的显式JOIN
语法。简单规则:从不在FROM
子句中使用逗号。并且,UNION ALL
可能比UNION
更合适,除非您打算删除重复项。
答案 1 :(得分:0)
@OVO
由于order by子句,我确信您的查询有错误42601。你不能在联合查询中拥有它。 从sqls&中删除order by by子句。然后像bla bla那样从(你的UNION SQL)订单中选择字段。