Union ALL不给第二组的列\名称

时间:2014-07-03 22:20:34

标签: sql ibm-midrange

我正在使用SQLDBx工具。我非常喜欢顺便说一句。我有5组Select语句系列,然后我在第一组之后创建了一个UNION ALL。现在它确实运行正常 并显示输出,但不分配第二组' 字段名称。

例如。我非常喜欢

完成模仿IBM i显示屏所需的SQL。屏幕上有5个产品组。我希望有一个大型Command SQL使用UNION ALL的5个SQL。这可以作为命令“编译”。但是,它只会带来第一部分字段而不是第二部分字段。因此,该字段不包含在COMMAND的字段树列表中。 PROGR2R2PST,

UNION ALL怎么办? OUTPUT指定列名称

第一组到第二组。 HLDGR1PUN 21454 87273

所以如果我想要一个带有union 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,

1 个答案:

答案 0 :(得分:1)

我认为你不能通过“嵌套”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。如果此格式与您的要求不符,请在问题或评论中更明确,我会尽力提供帮助。