插入带有case语句的列
我有一个问题,我希望在单个列中查找语句,并且每次找到它们时都会在混合中插入一个新列。我使用MySQL数据库。插入带有case语句的列
例如说我有这样的
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
表达式汇总并添加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
回答:
您需要使用PIVOT
功能。您还没有指定您的DBMS,但是这里是一个链接的SQL Server:Using PIVOT and UNPIVOT
回答:
如果您正在使用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 |
以上是 插入带有case语句的列 的全部内容, 来源链接: utcz.com/qa/267055.html