SQL - 基于条件虚拟列的off值集

时间:2012-07-24 07:26:04

标签: sql

表名: SimpleTable

| A | B | C | D | E | F | 
+----------------------+ 
| 5 | 3 | 5 | 9 | 6 | 3 | 
| 7 | 5 | 0 | 0 | 9 | 2 | 
| 1 | 6 | 1 | 2 | 4 | 5 | 
| 2 | 9 | 4 | 4 | 9 | 0 | 
| 9 | 2 | 3 | 5 | 2 | 8 | 

我有一个看起来像这样的简单表,我基本上想做的是在这个简单的表上做一个select但是在结果中有一个额外的虚拟列(为简单起见称为“Dummy”)。此虚拟列是使用其他列中的值构建的,如果整数为7或更大,则包含列的标题。例如,第一行的虚拟显示“D”,但第二行显示“A / E”。我无法弄清楚如何在SQL中实现这种逻辑,但非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

如果这是Sql Server,那么

select *,
       stuff (case when a >= 7 then '/A' else '' end
            + case when b >= 7 then '/B' else '' end
            + case when c >= 7 then '/C' else '' end
            + case when d >= 7 then '/D' else '' end
            + case when e >= 7 then '/E' else '' end
            + case when f >= 7 then '/F' else '' end,
         1, 1, '') dummy
  from SimpleTable

如果没有一列大于或等于7,则dummy将为null。

答案 1 :(得分:0)

SELECT A, B, C, D, E, F,
CASE 
 WHEN A >= 7 THEN 'A/' 
 ELSE '' END
+
 CASE 
 WHEN B >= 7 THEN 'B/' 
 ELSE '' END
+
CASE 
 WHEN C >= 7 THEN 'C/' 
 ELSE '' END
+
CASE 
 WHEN D >= 7 THEN 'D/' 
 ELSE '' END
+
CASE 
 WHEN E >= 7 THEN 'E/' 
 ELSE '' END
+
CASE 
 WHEN F >= 7 THEN 'F' 
 ELSE '' END

AS Dummy
FROM SimpleTable