6

尝试创建一个计算列,该列的值基于其他四个列中的值。第 1 列、第 2 列、第 3 列、第 4 列可以是“是”或“否”。计算列中的最终结果,比如说进度,应该是这样的:

Progress = CASE
WHEN [Column1] = 'Yes' THEN Value+1
WHEN [Column2] = 'Yes' THEN Value+1
WHEN [Column3] = 'Yes' THEN Value+1
WHEN [Column4] = 'Yes' THEN Value+1
ELSE 0 END

希望这是有道理的,因为上面的语法显然是不正确的。

4

2 回答 2

7

听起来这就是你想要的。

Progress = 
CASE WHEN [Column1] = 'Yes' THEN 1 ELSE 0 END +
CASE WHEN [Column2] = 'Yes' THEN 1 ELSE 0 END +
CASE WHEN [Column3] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column4] = 'Yes' THEN 1 ELSE 0 END 

这将为每个“是”返回 0 + 1。

于 2013-04-22T19:51:30.603 回答
2

在 SQL Server 中:

SELECT  *
FROM    mytable
CROSS APPLY
        (
        SELECT  COALESCE(SUM(CASE val WHEN 'yes' THEN 1 END), 0)
        FROM    (VALUES (NULL)) q(v)
        UNPIVOT
                (
                val FOR col IN
                (column1, column2, column3, column4)
                ) c
        ) q (progress)

请参阅SQLFiddle

于 2013-04-22T20:03:22.643 回答