sql-server - 涉及 Null 和空白与填充值的复杂 SQL Server Pivot
问题描述
我需要将“dep”列分成 2 个不同的列,一个被“记录”,另一个被“未记录”。“未记录”列将包含当天“dep”为空白或为空的条目的时间总和。“记录”列需要显示“dep”列不为空或空白的那一天的时间总和。
到目前为止,这就是我所拥有的
SELECT Cast(Start_Time AS DATE) AS Date, dep,
sum(time) as "Total Time"
FROM A6K_Events
Group By Cast(Start_Time AS DATE), dep
它产生了这个
+------------+--------------+------------+
| Date | Dep | Total Time |
+------------+--------------+------------+
| 2018-06-29 | Null | 3544 |
+------------+--------------+------------+
| 2018-06-29 | Other | 268 |
+------------+--------------+------------+
| 2018-06-29 | Training | 471 |
+------------+--------------+------------+
| 2018-06-29 | Change Point | 371 |
+------------+--------------+------------+
| 2018-06-28 | Null | 4519 |
+------------+--------------+------------+
| 2018-06-28 | Training | 1324 |
+------------+--------------+------------+
| 2018-06-28 | | 50 |
+------------+--------------+------------+
这就是我想要的最终结果
+------------+----------+------------+
| Date | Recorded | Unrecorded |
+------------+----------+------------+
| 2018-06-29 | 1110 | 3544 |
+------------+----------+------------+
| 2018-06-28 | 1324 | 4569 |
+------------+----------+------------+
任何建议或帮助将不胜感激。我无法弄清楚如何将空值和空白值旋转并过滤到一列中,而其他填充值到另一列中。
谢谢你。
解决方案
Pivot 不是必需的,我们可以使用 CASE 语句获取数据
SELECT start_time as Date, sum(case when dep is not NULL or dep <> '' then time end) as "Recorded", sum(case when dep is NULL or dep = '' then time end) as "Unrecorded"
FROM A6K_Events
Group By start_time order by 1 desc
推荐阅读
- reactjs - 开始后不久,屏幕共享视频质量从原始质量下降到低质量
- php - 无法获取graph api返回的response的key的值
- javascript - 为 JSON 字幕中的每个单词创建一个可点击的跨度
- jquery - 动态创建 L.geoJson 的样式
- flutter - 如何将函数传递给较低的小部件
- python - 读取文件 .mat 时没有这样的文件或目录
- go - 自动登录后使用 envoy 作为远程站点的反向代理
- html - 如何让一个组件根据情况显示不同的内容?
- collections - 集合计数不适用于当前视图链接列表
- android - 使用 ItemDecoration 时不正确的列间距