插入带有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
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
答
如果您正在使用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 |
使用max函数和group by不能解决问题,对于每个单独的类我都需要所有的va代表所有的代表。在我的情况下,当我按功能做组时,我失去了重复,这很好,但是这些值并没有在单个类中表示出来。 – mmSQL
@mmSQL - 这将返回您希望从示例数据中获得的结果([请参阅SQL小提琴链接](http://www.sqlfiddle.com/#!3/186ec/10))。你是说你真的想要不同的东西吗? –
没关系,我明白了!我有一个小错字。 – mmSQL