sql - SQL GROUP BY 列值
问题描述
选择以下数据时,我想制作它,以便我可以按列分组,以便所有“Y”。下图显示了当前的外观;
第二张图片显示了最终结果的外观。
SELECT p.FirstName
,p.Surname
,CASE
WHEN a.ActivityName = 'Jumping' THEN 'Y'
ELSE 'N'
END AS 'Jumping'
,CASE
WHEN a.ActivityName = 'Dancing' THEN 'Y'
ELSE 'N'
END AS 'Dancing'
,CASE
WHEN a.ActivityName = 'Walking' THEN 'Y'
ELSE 'N'
END AS 'Walking'
FROM #TempActivity a
INNER JOIN #TempPerson p ON a.AID = p.ActivityID
WHERE FirstName = 'John'
AND Surname = 'Smith'
下面我复制了整个建表过程,让大家可以看到所有的数据和表结构。我发布了在这种情况下设计表格的更好方法,但这只是一个示例,以便我知道在其他地方应用的方法;
CREATE TABLE #TempActivity(
AID INT
,ActivityName VARCHAR(100)
)
CREATE TABLE #TempPerson(
PID INT
,FirstName VARCHAR(100)
,Surname VARCHAR(100)
,ActivityID INT
)
INSERT INTO #TempActivity
VALUES (1,'Jumping')
,(2,'Dancing')
,(3,'Walking')
INSERT INTO #TempPerson
VALUES (1,'John', 'Smith', 1)
,(2,'John', 'Smith', 2)
,(3,'John', 'Smith', 3)
,(4,'Jane','Smith', 1)
,(5,'Jane','Smith', 2)
SELECT * FROM #TempActivity
SELECT * FROM #TempPerson
SELECT p.FirstName
,p.Surname
,a.ActivityName
FROM #TempActivity a
INNER JOIN #TempPerson p ON a.AID = p.ActivityID
WHERE FirstName = 'John'
AND Surname = 'Smith'
SELECT p.FirstName
,p.Surname
,CASE
WHEN a.ActivityName = 'Jumping' THEN 'Y'
ELSE 'N'
END AS 'Jumping'
,CASE
WHEN a.ActivityName = 'Dancing' THEN 'Y'
ELSE 'N'
END AS 'Dancing'
,CASE
WHEN a.ActivityName = 'Walking' THEN 'Y'
ELSE 'N'
END AS 'Walking'
FROM #TempActivity a
INNER JOIN #TempPerson p ON a.AID = p.ActivityID
WHERE FirstName = 'John'
AND Surname = 'Smith'
DROP TABLE #TempActivity;
DROP TABLE #TempPerson;
解决方案
SELECT p.FirstName
,p.Surname
,CASE WHEN SUM(CASE
WHEN a.ActivityName = 'Jumping' THEN 1
ELSE 0 END) > 0 THEN 'Y'
ELSE 'N'
END AS 'Jumping'
,CASE WHEN SUM(CASE
WHEN a.ActivityName = 'Dancing' THEN 1
ELSE 0 END) > 0 THEN 'Y'
ELSE 'N'
END AS 'Dancing'
,CASE WHEN SUM(CASE
WHEN a.ActivityName = 'Walking' THEN 1
ELSE 0 END) > 0 THEN 'Y'
ELSE 'N'
END AS 'Walking'
FROM #TempActivity a
INNER JOIN #TempPerson p ON a.AID = p.ActivityID
WHERE FirstName = 'John'
AND Surname = 'Smith'
GROUP BY FirstName, SurName
推荐阅读
- python - 用漂亮的汤刮和循环元标记
- android - writeDataToFile(String) 在 FindBugs 中检查异常时可能无法清理 java.io.Writer
- c# - c# - 如何将选中列表框中的选中项目打印到c#中的标签?
- css - 角度将参数传递给css动画
- python - isinstance() 方法在 Python 3 中返回错误答案
- wpf - 如何更改 MahApps Metro 滑块上的默认颜色
- javascript - 如何找出最接近的坐标?
- r - 如何在同一个面板中绘制两个图(ggplot2)
- node.js - 如何将导入的模块替换为存根
- postgresql - MS Visio 模型如何存储在数据库中?