簡體   English   中英

Informix的CASE語句

[英]CASE Statement With Informix

我想更新針對Informix表運行的查詢,需要一些幫助。 不幸的是,我沒有意識到SQL Server和Informix之間的區別,並且在這里得到了一個很大的響應,但沒有用。

基本上我想做的是創建一個名為Job_Account的新列,如果我在CASE語句中返回Y,或者如果我返回N,則為將返回Y的記錄顯示cus_num。這些記錄將具有不同的客戶編號,但共享一個cus_dun_no。 因此,基本上,如果Main為N,則顯示主要客戶編號(本應返回Y的記錄)。

結果看起來像:

Main    Job Account cus_cus_no      cus_lkp_nm  cus_nm

Y                   6625            ABC, INC.   ABC, INC.
N       6625        6694            ABC (123)   ABC, INC.(123)

這是當前查詢:

SELECT CASE 
    WHEN (
            cus_nm LIKE '%(%'
            AND cus_lkp_nm NOT LIKE '%REG%'
         )
        THEN 'N'
    ELSE 'Y'
    END AS Main
,*
FROM arrcus_rec
WHERE cus_dun_no IN (
    SELECT cus_dun_no
    FROM arrcus_rec
    WHERE cus_usg_sts = 'A'
    GROUP BY cus_dun_no
    HAVING COUNT(cus_dun_no) > 1
    )

樣本數據示例:

在此處輸入圖片說明

您可以看到示例數據顯示了工作帳戶(帶有括號),並且我已將Y標記為主帳戶,將N標記為工作帳戶。

我認為這會產生您所追求的輸出:

SELECT CASE 
       WHEN (A.cus_nm LIKE '%(%' AND A.cus_lkp_nm NOT LIKE '%REG%')
       THEN 'N'
       ELSE 'Y'
       END AS Main,
       CASE
       WHEN (A.cus_nm LIKE '%(%' AND A.cus_lkp_nm NOT LIKE '%REG%')
       THEN (SELECT B.cus_cus_no
               FROM arrcus_rec AS B
              WHERE B.cus_dun_no = A.cus_dun_no
                    -- Beware De Morgan
                AND (B.cus_nm NOT LIKE '%(%' OR B.cus_lkp_nm LIKE '%REG%')
            )
       ELSE NULL::INTEGER
       END AS Job_Account,
       *
  FROM arrcus_rec A
 WHERE cus_dun_no IN (
           SELECT cus_dun_no
             FROM arrcus_rec
          --WHERE cus_usg_sts = 'A'
            GROUP BY cus_dun_no
           HAVING COUNT(cus_dun_no) > 1
       )

主WHERE子句中的子查詢對圖像中給定的數據(帶有AFAKORI的數據特別突出)產生答案6410981。

第二個CASE表達式產生所需的神奇答案。 它計算出該行是否不是主帳戶,並運行子查詢以獲取相應的主帳戶,或者如果這是主帳戶,則返回NULL::INTEGER (將NULL轉換為整數類型)。

對於樣本數據:

cus_cus_no  cus_lkp_nm       cus_nm                           cus_dun_no
      6625  AFAKORI, INC.    AFAKORI, INC.                       6410981
      6694  AFAKORI, (594)   AFAKORI, INC,(LBCCD-BUILDING)       6410981
      6832  AFAKORI, (596)   AFAKORI, INC.(SECURITY COMPLEX)     6410981

顯示的查詢的輸出為:

main|job_account|cus_cus_no |cus_lkp_nm .    |cus_nm                          |cus_dun_no |
   Y|           |       6625|AFAKORI, INC.   |AFAKORI, INC.                   |    6410981|
   N|       6625|       6694|AFAKORI, (594)  |AFAKORI, INC,(LBCCD-BUILDING)   |    6410981|
   N|       6625|       6832|AFAKORI, (596)  |AFAKORI, INC.(SECURITY COMPLEX) |    6410981|

我不知道Informix,但在標准SQL中存在一個語義問題:與group by列相同的count()無法工作, Having count(cus_dun_no)>1可能總是錯誤的。

可以,但是沒有示例數據,我是盲目的:

FROM arrcus_rec
WHERE cus_cus_no IN (
  SELECT cus_cus_no
  FROM arrcus_rec
  WHERE cus_usg_sts = 'A'
  GROUP BY cus_cus_no
  HAVING COUNT(cus_dun_no) > 1
)

請添加sql標記:)

暫無
暫無

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

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