CASE语句将一列分成两列

时间:2015-01-28 00:53:23

标签: sql sql-server-2012

如果我的QueryID列具有特定帐户的值“NU.PN20”和“NU.FLREF”。然后我只期望结果是:

PStatus IStatus
3       3

不是得到上述内容,我会得到类似的内容:

PStatus IStatus
    3       5
    5       3

我希望这很清楚。请协助。感谢。

CASE 
  WHEN AV.QueryID IN ('NU.PN1','NU.PN2') AND AV.Response = 'Y' THEN '2'
  WHEN AV.QueryID = 'NU.PN20' AND AV.Response = 'Y' THEN '3'
  WHEN AV.QueryID = 'NU.PN4' AND AV.Response = 'Y' THEN '4'
  ELSE '5'
END AS [PStatus],
CASE   
 WHEN AV.QueryID = 'NU.FL1' AND AV.Response = 'Y' THEN '2'
 WHEN AV.QueryID = 'NU.FLREF' AND AV.Response = 'Y' THEN '3'
 WHEN AV.QueryID IN ('NU.FL2','NU.FL6') AND AV.Response = 'Y' THEN '4'
 WHEN AV.QueryID = 'ACNOAVAIL' AND AV.Response = 'Y' THEN '6'
 ELSE '5'
END AS [IStatus]

1 个答案:

答案 0 :(得分:0)

你的问题很不清楚, 但这是基于常识的答案:

“请查看以下一个帐户的结果。它正在创建额外的行“

我假设“Case When”语句是insert语句的一部分, 如果你在“预期的行”上得到“额外的行”, 然后你的语句不止一次被调用,你应该检查它的原因。

"我认为PStatus和IStatus没有正确的链接所以它总是包含5。"

如果在案例陈述中找不到匹配, 它将包括一个“5”,因为它在你的“Else”声明中声明。

两个行动项目:

  1. 检查对数据库程序的调用量。

  2. 检查输入。