[英]Union help on DB2
I am trying to union two queries to show the top 5 customer codes but I keep receiving an error, SQLSTATE 42601
. 我试图合并两个查询以显示前5个客户代码,但我一直收到错误
SQLSTATE 42601
。 Ideally I would like the query to show something like this. 理想情况下,我希望查询显示类似这样的内容。
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
Try using parentheses around the subqueries: 尝试在子查询周围使用括号:
(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
)
Also, you should learn to use proper explicit JOIN
syntax. 另外,您应该学习使用正确的显式
JOIN
语法。 Simple rule: Never use commas in the FROM
clause. 简单规则: 请勿在
FROM
子句中使用逗号。 And, UNION ALL
is probably more appropriate than UNION
, unless you intend for duplicates to be removed. 并且,除非您打算删除重复项,否则
UNION ALL
可能比UNION
更合适。
@OVO @OVO
I am sure that your query has error 42601 due to order by clause. 我确定由于order by子句,您的查询有错误42601。 You cant have it in union query.
您不能在联合查询中使用它。 Remove order by clause from both sqls & put then like select fields from (YOUR UNION SQL) order by bla bla.
从两个sql中删除order by子句,然后按bla bla的方式从(YOUR UNION SQL)order中选择字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.