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