我有一个问题,我希望在单个列中查找语句,每次找到它们时,都会在混合列中插入一个新的列。我正在使用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语句。组合case语句将不起作用,因为这仍然给我一个单独的列。
发布于 2012-12-21 01:01:45
您需要将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 发布于 2012-12-21 01:02:53
您需要使用PIVOT功能。您尚未指定您的数据库管理系统,但这里有一个指向SQL Server的链接:Using PIVOT and UNPIVOT
发布于 2012-12-21 01:27:50
如果您使用的是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 |https://stackoverflow.com/questions/13977000
复制相似问题