Informix的CASE语句

时间:2018-11-27 18:39:50

标签: sql informix

我想更新针对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
    )

示例数据示例:

enter image description here

您可以看到示例数据显示了工作帐户(带有括号),并且我将主帐户标记为Y,将工作帐户标记为N。

2 个答案:

答案 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标签:)