我有一个问题,我想在一个列中查找语句,每次我发现它们都会在混合中插入一个新列。我使用的是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
语句来查找列中的值,但问题是它只会在列中找到它找到的值的一个结果,并且我最终获得了相同的类重复每列的案例陈述。结合案例陈述不会起作用,因为它仍然给我一个列。
答案 0 :(得分:4)
您需要将CASE
表达式包装在聚合中并添加GROUP BY
。在这种情况下,MAX
将在Y
N
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
结果是:
| CLASS | MATH | TECH | ENGLISH |
---------------------------------
| 1 | Y | Y | N |
| 2 | Y | N | Y |
| 3 | Y | N | N |