sql - 如何将行转换为分组数据的列?
问题描述
在进行员工和主管分析时,我遇到了 BigQuery 语句的问题。
SELECT SupervisorName, Emp_Status, COUNT(DISTINCT EmpNO)AS NUMBER
FROM
(SELECT
EmpNO,
EmpName,
(CASE WHEN TerminationDate IS NULL THEN 'Active'
ELSE 'Terminated'
END
)AS Emp_Status,
DateOfBirth,
DATE_DIFF(CURRENT_DATE(),DateOfBirth,YEAR) AS Age,
SupervisorName
FROM `Table1`
)
GROUP BY SupervisorName, Emp_Status
ORDER BY SupervisorName, NUMBER DESC
结果如下所示:
Row SupervisorName Emp_Status NUMBER
1 null Terminated 321
2 null Active 2
3 Ahearn Active 3
4 Ahearn Terminated 2
5 Allen Active 6
6 Allen Terminated 3
......
我怎样才能把它改成这样:
Row SupervisorName Active Termination Total
1 Null 2 321 323
2 Ahearn 3 2 5
3 Allen 6 3 9
......
解决方案
这里的标准模式是使用 SUM 和 CASE 来获得结果——如下:
SELECT
SupervisorName,
SUM(CASE WHEN Emp_Status = 'Active' THEN 1 ELSE 0 END) AS Active,
SUM(CASE WHEN Emp_Status = 'Terminated' THEN 1 ELSE 0 END) AS Termination,
COUNT(*) AS Total
FROM (
SELECT
EmpNO,
EmpName,
CASE WHEN TerminationDate IS NULL THEN 'Active' ELSE 'Terminated' END AS Emp_Status,
DateOfBirth,
DATE_DIFF(CURRENT_DATE(),DateOfBirth,YEAR) AS Age,
SupervisorName
FROM `Table1`
)
GROUP BY SupervisorName
请注意,我留下了与您相同的子查询,但鉴于您实际上不需要子查询,您只需更改 CASE 语句以查看终止日期而不是您在子查询中创建的字符串。
我假设您的实际代码更复杂,所以我就这样离开了。
推荐阅读
- python-asyncio - 如何使用 asyncio.Future 将基于事件的通信转换为 async/await
- javascript - 在我的 html 中包含一个 svg 元素会破坏 jquery ui
- django - Django REST 在 DetailView 上抛出 404 错误
- python - 在 Python 上使用 selenium 单击多个元素
- python - 使用 pandas 比较不同块中的值
- javascript - 数据表格式无效:第 2 列的类型必须为“日期、数字、日期时间”。×
- javascript - 表内的下拉列表位于列下方
- groovy - 从列表映射中打印唯一键迭代groovy
- asp.net-core - Netlify 和 ASP.NET Core Web API
- sql-server - Windows 中可以连接哪些 SQL 驱动程序以及 ConnString 上的 SqlClient 驱动程序是什么?