我有这样的行......
| NAME | RED | BLUE | GREEN |
LeAnn 1 0 1
Jim 0 0 0
Timothy 1 1 1
我想编写一个返回以下行的select语句...
| Name | Note |
LeAnn RED, Green
Jim
Timothy RED, BLUE, GREEN
我该怎么做?我尝试使用case语句,但只会在Note中获取一个值而不是多个值。谢谢!
我的尝试:
SELECT Name,
CASE
WHEN Red = 1 THEN 'Red' + ', '
WHEN Blue = 1 THEN 'Blue' + ', '
WHEN Green = 1 THEN 'Green' + ', '
END as Note
FROM MyTable
答案 0 :(得分:1)
SELECT Name, CASE WHEN RED = 1 THEN "RED " ELSE "" END + CASE WHEN BLUE = 1 THEN "BLUE " ELSE "" END + CASE WHEN GREEN = 1 THEN "GREEN" ELSE "" END
FROM tableName
需要有3个独立的案例,否则只会执行其中一个案例。
你需要更新上面的内容以正确处理逗号,但是我太懒了把它放在
中答案 1 :(得分:1)
由于案例不是互斥的,因此您需要三个不同的案例:
SELECT ('' +
CASE WHEN Red = 1 THEN 'Red, ' ELSE '' END
CASE WHEN Blue = 1 THEN 'Blue, ' ELSE '' END
CASE WHEN Green = 1 THEN 'Green, ' ELSE '' END
)
AS Note
FROM MyTable
答案 2 :(得分:0)
SELECT Name,
CONCAT(
IF(Red = 1, 'Red', ''),
IF(Red = 1 AND Blue = 1, ', ', ''),
IF(Blue = 1, 'Blue', ''),
IF(Red = 1 AND Green = 1 AND `Blue` = 0, ', ', ''),
IF(Blue = 1 AND Green = 1, ', ', ''),
IF(Green = 1, 'Green', '')
) AS Note
From Table
我认为这应该有效!如果没有,请告诉我;)
答案 3 :(得分:0)
这个怎么样?
select name, left(Note, abs(len(Note) - 1)) from (
select name, '' +
CASE WHEN Red = 1 THEN 'Red, ' ELSE '' END +
CASE WHEN Blue = 1 THEN 'Blue, ' ELSE '' END +
CASE WHEN Green = 1 THEN 'Green, ' ELSE '' END
as Note
from t
) final
答案 4 :(得分:0)
SELECT
''
+ ISNULL(NULLIF(Red, 0), 'Red, ')
+ ISNULL(NULLIF(Blue, 0), 'Blue, ')
+ ISNULL(NULLIF(Green, 0), 'Green, ')
AS Note
FROM
TheTable
这将创建一个您必须修剪的尾随逗号。例如:
SELECT
REPLACE(
''
+ ISNULL(NULLIF(Red, 0), 'Red, ')
+ ISNULL(NULLIF(Blue, 0), 'Blue, ')
+ ISNULL(NULLIF(Green, 0), 'Green, ')
+ '$',
', $',
''
) AS Note
FROM
TheTable