C#高级:Lambda表达式分组处理2(WITH ROLLUP关键字)
2024-01-03 17:23:58
目录
一、问题引入
查询SQL后结果如下,字段分别是用户、项目、批次、工作时间:
SELECT UserID,ProjectID,ProBatchesID,WorkHour?
FROM ?MAINTABLE
GROUP BY
HourFiller
,ProjectID?
,ProBatchesID?
结果:
UserID | ProjectID | ProBatchesID | WorkHour |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | 1accce0a-1d4e-4e73-aa6f-9e2da0337f60 | 8 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba | 2 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f719e55b-8142-43a7-a865-29e053d05660 | 24 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 16 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 48 |
我要的需求是:对每个人每个项目做一个WorkHour的合计,如何运用with rollup实现
二、with rollup查询
WITH TEMP AS(
?? ?SELECT UserID,ProjectID,ProBatchesID,WorkHour FROM ?MAINTABLE?
?? ?GROUP BY
?? ?HourFiller
?? ?,ProjectID?
?? ?,ProBatchesID?
?? ?WITH ROLLUP
)
SELECT * FROM TEMP
结果:
UserID | ProjectID | ProBatchesID | WorkHour |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | NULL | 296 |
0400bb0e-a957-479e-98e0-60c4542eefa6 | NULL | NULL | 296 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | NULL | 296 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | NULL | NULL | 296 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | 1accce0a-1d4e-4e73-aa6f-9e2da0337f60 | 8 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba | 2 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f719e55b-8142-43a7-a865-29e053d05660 | 24 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | NULL | 34 |
056f117a-163e-4cd9-acf1-362837c9904a | NULL | NULL | 34 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 16 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 48 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | NULL | 64 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | NULL | NULL | 64 |
发现结果中不同人不同项目会自动分组合计,因此我们去掉多余的合计数据即可。
三、去掉多余数据
WITH TEMP AS(
?? ?SELECT UserID,ProjectID,ProBatchesID,WorkHour FROM ?MAINTABLE?
?? ?GROUP BY
?? ?HourFiller
?? ?,ProjectID?
?? ?,ProBatchesID?
?? ?WITH ROLLUP
)
SELECT?
CASE WHEN ProBatchesID IS NULL THEN 'Total' ELSE UserID END AS UserID /*列出子数据和总合计*/
,CASE WHEN ProBatchesID IS NULL THEN 'Total' ELSE ProjectID END AS ProjectID
,CASE WHEN ProBatchesID IS NULL THEN 'Total' ELSE ?ProBatchesID END AS ProBatchesID?
,WorkHour
FROM TEMP
WHERE ProjectID IS NOT NULL /*去掉多余的合计数据*/?
结果:
UserID | ProjectID | ProBatchesID | WorkHour |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
0400bb0e-a957-479e-98e0-60c4542eefa6 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
Total | Total | Total | 296 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 72 |
052a3c6e-3a0e-44d2-8d5c-177760d03768 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 224 |
Total | Total | Total | 296 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | 1accce0a-1d4e-4e73-aa6f-9e2da0337f60 | 8 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba | 2 |
056f117a-163e-4cd9-acf1-362837c9904a | 53aa4cf1-99bf-46a0-acd6-11fc5b28e076 | f719e55b-8142-43a7-a865-29e053d05660 | 24 |
Total | Total | Total | 34 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 0C00F223-F9B7-4C23-A762-CC8A23D25F2C | 16 |
071632d3-65ae-4f13-b45d-e158e46bbf24 | E963F8E2-4713-4B7C-A154-CC4ED75A0CAA | 596BDF31-0038-4C36-AA95-B03F3D9C7B06 | 48 |
Total | Total | Total | 64 |
四、拓展
?【拓展】如果题目改为:
对每个项目做一个WorkHour的合计,如何运用with rollup实现
①调整groupby顺序(调整后:)
?? ?GROUP BY
?? ? ProjectID?
?? ?,HourFiller
?? ?,ProBatchesID?
②调整case when的判空条件(查表后具体问题具体分析)
③调整筛选范围(查表后具体问题具体分析)
【注意】
以下这种情况,虽然数据都被覆盖为Total,但是实际的值还是null,023d991d-e3cb-412b-9226-ec7fca86833c,null,换句话说,SELECT * FROM TABLE WHERE UserID IS NULL 能筛选出最后一条数据
文章来源:https://blog.csdn.net/m0_67412019/article/details/135365743
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!