简体   繁体   English

关于DB2的联盟帮助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM