簡體   English   中英

具有三個或更多選擇的UNION ALL正確語句

[英]Correct statement for UNION ALL with three or more selects

我有以下情況:

我有一個由“ UNION ALL”加入的6個選擇組成的腳本。

從CLP DB2控制台,此腳本失敗。 奇怪的是,每個查詢都是獨立工作的,甚至成對分組也可以工作。 但是,當我嘗試三個或更多時,它將失敗。

因此,我的問題是:一個UNION ALL是否有限制?

我的環境是:

  • 客戶。 DB2 Connect服務器10.1
  • zOS 390(不知道那邊的DB2版本是什么)
  • AIX 7.1

查詢是這樣的(但是三遍)

SELECT
        ,'GG'
    ,varchar(right( '000000000000000' || rtrim(ltrim(eeee.zzzz)), 15), 15)  
        ,substr(char(right('**********'||char(left(replace(eeee.yyyy,' ','*')||'**********',10),10),10),10),1,7)
        ,eeee.kkkkk
        ,eeee.hhhhhh
            ,CASE WHEN hhhhhh='A5 ' THEN 'ARS' WHEN hhhhhh='A6 ' THEN 'AUD' WHEN hhhhhh='B5 ' THEN 'BRL' WHEN hhhhhh='U1 ' THEN 'GBP' WHEN hhhhhh='B9 ' THEN 'BND' WHEN hhhhhh='B6 ' THEN 'BNG' WHEN hhhhhh='C1 ' THEN 'CAD' WHEN hhhhhh='C3 ' THEN 'CLP' WHEN hhhhhh='C4 ' THEN 'CNY' WHEN hhhhhh='C5 ' THEN 'COP' WHEN hhhhhh='C7 ' THEN 'CRC' WHEN hhhhhh='L5 ' THEN 'HRK' WHEN hhhhhh='C9 ' THEN 'CYP' WHEN hhhhhh='X0 ' THEN 'CZK' WHEN hhhhhh='D0 ' THEN 'DKK' WHEN hhhhhh='D1 ' THEN 'DOP' WHEN hhhhhh='U0 ' THEN 'EGP' WHEN hhhhhh='E3 ' THEN 'EUR' WHEN hhhhhh='G5 ' THEN 'GTQ' WHEN hhhhhh='H0 ' THEN 'HTG' WHEN hhhhhh='H3 ' THEN 'HUF' WHEN hhhhhh='I1 ' THEN 'INR' WHEN hhhhhh='I2 ' THEN 'IDR' WHEN hhhhhh='K2 ' THEN 'WON' WHEN hhhhhh='L6 ' THEN 'LVL' WHEN hhhhhh='L7 ' THEN 'LTL' WHEN hhhhhh='M2 ' THEN 'MYR' WHEN hhhhhh='M6 ' THEN 'MXN' WHEN hhhhhh='I8 ' THEN 'ILS' WHEN hhhhhh='N2 ' THEN 'NZD' WHEN hhhhhh='N4 ' THEN 'NIO' WHEN hhhhhh='N6 ' THEN 'NOK' WHEN hhhhhh='T4 ' THEN 'XPF' WHEN hhhhhh='P0 ' THEN 'PKR' WHEN hhhhhh='P1 ' THEN 'PAB' WHEN hhhhhh='P3 ' THEN 'PEN' WHEN hhhhhh='P4 ' THEN 'PHP' WHEN hhhhhh='P5 ' THEN 'PLN' WHEN hhhhhh='R2 ' THEN 'RON' WHEN hhhhhh='U3 ' THEN 'RUB' WHEN hhhhhh='S0 ' THEN 'SAR' WHEN hhhhhh='R6 ' THEN 'RSD' WHEN hhhhhh='S2 ' THEN 'SGD' WHEN hhhhhh='K5 ' THEN 'SKK' WHEN hhhhhh='S4 ' THEN 'ZAR' WHEN hhhhhh='C2 ' THEN 'LKR' WHEN hhhhhh='S8 ' THEN 'SEK' WHEN hhhhhh='S9 ' THEN 'CHF' WHEN hhhhhh='T2 ' THEN 'THB' WHEN hhhhhh='T6 ' THEN 'TRL' WHEN hhhhhh='U4 ' THEN 'USD' WHEN hhhhhh='U6 ' THEN 'UAH' WHEN hhhhhh='U5 ' THEN 'AED' WHEN hhhhhh='U2 ' THEN 'UYU' WHEN hhhhhh='V0 ' THEN 'VEB' WHEN hhhhhh='V1 ' THEN 'VND' WHEN hhhhhh='J1 ' THEN 'JPY' ELSE '###' END
        ,  case when eeee.FCRCIDF='Y' then 1 else 0 end
        ,
                    CASE
                    WHEN SUBSTR(eeee.yyyy,7,1) = 'X' THEN 'X'       
                    WHEN SUBSTR(eeee.yyyy,4,2) = 'O' THEN 'O'       
                    WHEN SUBSTR(eeee.yyyy,4,2) = 'C' THEN 'C'       
                    WHEN SUBSTR(eeee.yyyy,4,2) = 'R' THEN 'R'       
                    WHEN eeee.lll = 'F' THEN 'F'            
                    WHEN eeee.ppp <> '' THEN 'D'            
                    WHEN eeee.rrr = 0 THEN '0'          
                    WHEN eeee.rrr <> eeee.ACINTOT THEN 'P'      
                    WHEN eeee.rrr = eeee.ACINTOT THEN '1'           
                    ELSE '*'                    
                    END
        ,1
        ,eeee.DCINISS
        ,0
        from  (SELECT ori.*,oric.tttt FROM www.SK1V01_CUSTOMER ori left OUTER JOIN www.SK1V01A_CUSTCUF oric
      ON ori.bbbb=oric.bbbb  and   ori.ICUSCNO=oric.ICUSCNO ) as aaaa
             ,www.SK1V02_OPENBILL eeee,www.SK1V41_OPENBILL kkkk
         where      aaaa.bbbb=eeee.bbbb
              and   aaaa.cagllic=eeee.cagllic
              and   aaaa.icuscno=eeee.icuscno

沒有整個陳述,很難確定確切原因。 鑒於只有一部分很長且格式不正確,因此我不確定我們是否想一探究竟。 但我可以建議一些可能有助於解決問題的方法。

最簡單的部分優先。 在幾乎任何計算機語言中,格式良好的代碼都可以幫助您了解正在發生的事情的結構。 它還可以幫助您發現查詢之間的差異。 (也許您知道這一點,並且您的代碼在嘗試發布時只是失去了其格式。)

當嘗試對多個復雜查詢進行UNION時,查詢之間的列不一致並不罕見。 您可能缺少或多余的列,或者列混亂。 但是您的某些列表達式可能會針對不同的類型求值。 可以肯定的是,您可能想要強制轉換()這些表達式,或使用類型轉換函數。

這里有很多事情。 嘗試使用注釋掉大量代碼的版本進行測試,每個主要子查詢中的注釋都相同,直到找到導致問題的部分。

您在hhhhhh上有一個荒謬的CASE表達式。 為什么不將這些值對放入可以加入的查找表中。

嘗試使用模塊方法,就像編寫大型程序時一樣。 您可以為每個主要查詢創建一個視圖,然后將它們聯合在一起。 (一些開發人員使用視圖層,例如模塊化代碼層)。

有關您的視圖的元數據可在數據庫目錄視圖中找到。 這意味着您可以編寫查詢以比較聯合視圖集中的列的屬性。

暫無
暫無

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

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