Informix 的 CASE 语句
CASE Statement With Informix
我想更新我 运行 针对 Informix table 的查询并需要一些帮助。
不幸的是,我没有意识到 SQL Server 和 Informix 之间的区别,并且得到了一个很好的响应 here 但它不起作用。
基本上我想做的是创建一个名为 Job_Account 的新列,如果我在 CASE 语句中返回 Y,或者如果我返回 N,则显示 cus_num 作为记录那会返回 Y。
这些记录将有不同的客户编号,但共享一个 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。
我不知道 Informix,但在标准 SQL 中存在语义问题:count()
在与 group by
相同的列上无法工作,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
标签:)
我认为这会产生您想要的输出:
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 表达式产生了想要的神奇答案。它计算出这一行是否不是主账户,并运行一个子查询来获取相应的主账户,或者 returns 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 table 的查询并需要一些帮助。 不幸的是,我没有意识到 SQL Server 和 Informix 之间的区别,并且得到了一个很好的响应 here 但它不起作用。
基本上我想做的是创建一个名为 Job_Account 的新列,如果我在 CASE 语句中返回 Y,或者如果我返回 N,则显示 cus_num 作为记录那会返回 Y。 这些记录将有不同的客户编号,但共享一个 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。
我不知道 Informix,但在标准 SQL 中存在语义问题:count()
在与 group by
相同的列上无法工作,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
标签:)
我认为这会产生您想要的输出:
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 表达式产生了想要的神奇答案。它计算出这一行是否不是主账户,并运行一个子查询来获取相应的主账户,或者 returns 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|