1

我有一个问题,我想在单个列中查找语句,每次找到它们时都会在组合中插入一个新列。我正在使用 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语句来查找列中的值,但问题是它只会在列中为它找到的值返回一个结果,并且我最终得到相同的类,每列都有一个 case 语句. 组合案例语句将不起作用,因为它仍然给我一个单列。

4

3 回答 3

4

您需要将CASE表达式包装在一个聚合中并添加一个 GROUP BY. 在这种情况下MAX,将按字母顺序工作YN

(SQL 小提琴演示)

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 
于 2012-12-20T17:01:44.610 回答
0

您需要使用PIVOT功能。你还没有指定你的 DBMS,但是这里有一个 SQL Server 的链接:Using PIVOT and UNPIVOT

于 2012-12-20T17:02:53.210 回答
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

结果是:

| CLASS | MATH | TECH | ENGLISH |
---------------------------------
|     1 |    Y |    Y |       N |
|     2 |    Y |    N |       Y |
|     3 |    Y |    N |       N |
于 2012-12-20T17:27:50.360 回答