使用case语句插入列

时间:2012-12-20 16:59:22

标签: mysql sql insert case

我有一个问题,我想在一个列中查找语句,每次我发现它们都会在混合中插入一个新列。我使用的是mysql数据库。

例如说我有这样的数据

  Class     Sub
  -----------------
    1       math       
    1       tech 
    2       math
    2       english
    3       math

我希望数据输出如下:

Class    math  tech english
---------------------------
    1      Y     Y     N
    2      Y     N     Y
    3      Y     N     N

我正在尝试使用CASE语句来查找列中的值,但问题是它只会在列中找到它找到的值的一个结果,并且我最终获得了相同的类重复每列的案例陈述。结合案例陈述不会起作用,因为它仍然给我一个列。

3 个答案:

答案 0 :(得分:4)

您需要将CASE表达式包装在聚合中并添加GROUP BY。在这种情况下,MAX将在Y

之后按字母顺序排列N

(SQL Fiddle Demo)

SELECT class,
       MAX(CASE
             WHEN ( community_id = 'Math' ) THEN 'Y'
             ELSE 'N'
           END)  AS Math,
       MAX (CASE
              WHEN ( community_id = 'tech' ) THEN 'Y'
              ELSE 'N'
            END) AS tech,
       MAX (CASE
              WHEN ( community_id = 'english' ) THEN 'Y'
              ELSE 'N'
            END) AS english
FROM   x_class_community
GROUP  BY class 

答案 1 :(得分:0)

您需要使用PIVOT功能。您尚未指定DBMS,但这是SQL Server的链接:Using PIVOT and UNPIVOT

答案 2 :(得分:0)

如果您使用的是SQL Server,则可以使用PIVOT功能:

select class,
  isnull(math, 'N') math, 
  isnull(tech, 'N') tech, 
  isnull(english, 'N') english
from
(
  SELECT class, community_id, 'Y' as flag
  FROM   x_class_community
) src
pivot
(
  max(flag)
  for community_id in (math, tech, english)
) piv

请参阅SQL Fiddle with Demo

结果是:

| CLASS | MATH | TECH | ENGLISH |
---------------------------------
|     1 |    Y |    Y |       N |
|     2 |    Y |    N |       Y |
|     3 |    Y |    N |       N |