我想更新针对Informix表运行的查询,需要一些帮助。 不幸的是,我没有意识到SQL Server和Informix之间的区别,并且得到了一个不错的答复here,这是行不通的。
基本上我想做的是创建一个名为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。
答案 0 :(得分:1)
我认为这会产生您想要的输出:
NULL::INTEGER
主WHERE子句中的子查询对图像中给出的数据(AFAKORI的数据突出显示)产生答案6410981。
第二个CASE表达式产生所需的神奇答案。可以计算出该行是否不是主帐户,并运行子查询以获取相应的主帐户,或者如果这是主帐户,则返回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
(将NULL转换为整数类型)。>
对于示例数据:
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|
所示查询的输出为:
public class TestA
{
private static final String VALUE_ABC = "VALUE_ABC";
private A classToTest;
@Test
public void testFoo()
{
classToTest.foo();
}
@Before
public void preTestSetup()
{
classToTest = new A();
ReflectionTestUtils.setField(
classToTest,
"abc",
VALUE_ABC)
}
}
答案 1 :(得分:0)
我不知道Informix,但是在标准SQL中存在一个语义问题:count()
与group by
在同一列上不起作用,Having count(cus_dun_no)>1
可能总是错误的。 / p>
可以,但是没有示例数据,我是盲目的:
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
标签:)