SQL:如何从一行的列值构建字符串?

时间:2012-03-29 19:00:29

标签: sql select sql-server-2008-r2 case-statement

我有这样的行......

|  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

5 个答案:

答案 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