簡體   English   中英

聯合所有不提供第二組的列\\名稱

[英]Union ALL not giving the column\ names for second group

我正在使用工具SQLDBx。 我非常喜歡順便說一句。 我有5組Select語句系列,然后在第一組之后創建了UNION ALL。 現在,它確實可以正確運行並顯示輸出,但未分配第二組的字段名稱。

例如。 我大大的

完成了模仿IBM i顯示屏所需的SQL。 屏幕共有5個產品組。 我希望有一個大型命令SQL,其中5個SQL使用UNION ALL。 這確實作為命令“編譯”。 但是,它僅引入第一部分字段,而不引入第二部分字段。 因此,該字段不包括在COMMAND的字段列表中。 PROGR2R2PST,

有一些不正確的方法來執行UNION ALL嗎? OUTPUT分配列名

第一組到第二組。 HLDGR1PUN 21454 87273

因此,如果我想使用一個帶有聯合ALL的大型SQL,它將無法正常工作。 除了UNION ALL,我還應該使用其他東西嗎?

SELECT

count(*) as PROGR1PST,

(

SELECT COALESCE(SUM(OdQty#),0)

FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTDTA.OEORD1

WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# AND OHCOM# = ODCOM# AND OHORD# = ODORD#

AND TSSTAT IN('AEP','BGE')

AND OHORDT IN('RTR','INT','SAM')

AND OHREQD < replace(char(current date, iso), '-', '')

AND OHHLDC = ' '

AND ODPRLC = 'ENG'

AND substr(odprt#,1,5) <> 'NOENG' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a  

WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP'))

) AS PROGR1PUN,

(

SELECT count(*)

FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTCCDTA.OETRA99

WHERE OHCOM# = TSCOM# AND OHORD# = TSORD#

AND (otCOM# = OHCOM# AND OTORD#= OHORD# AND ottrnc = 'AQC')

AND TSSTAT IN('AEP','BGE')

AND OHORDT IN('RTR','INT','SAM')

AND OHREQD = replace(char(current date, iso), '-', '')  AND OHHLDC = ' ' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a  

WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP'))

) AS PROGR1TOD,

(
etc..

UNION ALL



SELECT

count(*) as PROGR2R2PST,

(SELECT COALESCE(SUM(OdQty#),0) FROM ASTCCDTA.OEORH48,ASTCCDTA.TRNSTAT2,ASTDTA.OEORD1

  WHERE OHCOM# = TSCOM# AND OHORD# = TSORD# AND OHCOM# = ODCOM# AND OHORD# = ODORD#

  AND TSSTAT IN('AEP','BGE')

  AND OHORDT IN('CUS','CIN','SMC','COC','DON')

  AND OHREQD < replace(char(current date, iso), '-', '')

  AND OHHLDC = ' '

  AND ODPRLC = 'ENG'

  AND substr(odprt#,1,5) <> 'NOENG' AND OHORD# in(SELECT a.TSORD# FROM ASTCCDTA.TRNSTAT2 a   

WHERE a.tsstat IN('AEP','BGE','EAS','REL','STP'))

) AS PROGR2PUN,

我認為您無法通過“嵌套” SQL語句並將它們與UNION來獲得所需的結果。 此結構可能有效,具體取決於您的要求:

 SELECT 'Name1' AS Label , COUNT(*) AS The_Count
   FROM table1
   WHERE ...
 UNION ALL
 SELECT 'PROGR2R2PST', COUNT(*)
   FROM table2
   WHERE ...
 UNION ALL
 SELECT 'Name3', COUNT(*)
   FROM table3
   WHERE ...

這將使您每次選擇返回一行:

 Label      The_Count
 --------------------
 Name1          45867
 PROGR2R2PST       22
 Name3           1234

請注意,列名稱來自第一個select 如果這種格式不符合您的要求,請在問題或注釋中更明確地提出,我會盡力提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM