2013-04-22 63 views
5

试图创建一个基于其他四列中的值的计算列。 第1列,Coulmn 2,第3列,第4列可能是或否 最终结果的计算列,让我们说所谓的进步,应该沿着这条线的东西:要增加值的SQL Case语句

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 

希望这是有道理的显然上述语法不正确。

+0

所以你想在这些列的'是的? – cmd 2013-04-22 19:50:10

+3

请提供样本数据和结果以阐明您真正想要的内容。 – 2013-04-22 19:50:29

+0

什么是您的RDBMS(SQL风格)?它是MS SQL Server吗? – 2013-04-22 19:57:14

回答

5

这样的声音就是你要做的。

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。

+0

工作!感谢您的及时回应。为我节省了一大堆时间:-) – user1886816 2013-04-22 19:56:16

+0

@ user1886816没问题。好的提示是总是尝试在单个CASE语句中包含一个且仅有的一个值。 4列= 4例。 – 2013-04-22 19:57:28

1

在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

+0

哇!谢谢,但那正好在我头顶上:-( – user1886816 2013-04-22 20:58:46