C#高级:Lambda表达式分组处理2(WITH ROLLUP关键字)

目录

一、问题引入

二、with rollup查询

三、去掉多余数据

四、拓展


一、问题引入

查询SQL后结果如下,字段分别是用户、项目、批次、工作时间:

SELECT UserID,ProjectID,ProBatchesID,WorkHour 
FROM  MAINTABLE
GROUP BY
HourFiller
,ProjectID 
,ProBatchesID 

结果:

UserIDProjectIDProBatchesIDWorkHour
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e0761accce0a-1d4e-4e73-aa6f-9e2da0337f608
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba2
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f719e55b-8142-43a7-a865-29e053d0566024
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C16
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B0648

我要的需求是:对每个人每个项目做一个WorkHour的合计,如何运用with rollup实现

二、with rollup查询

WITH TEMP AS(SELECT UserID,ProjectID,ProBatchesID,WorkHour FROM  MAINTABLE GROUP BYHourFiller,ProjectID ,ProBatchesID WITH ROLLUP
)
SELECT * FROM TEMP

结果:

UserIDProjectIDProBatchesIDWorkHour
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAANULL296
0400bb0e-a957-479e-98e0-60c4542eefa6NULLNULL296
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAANULL296
052a3c6e-3a0e-44d2-8d5c-177760d03768NULLNULL296
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e0761accce0a-1d4e-4e73-aa6f-9e2da0337f608
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba2
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f719e55b-8142-43a7-a865-29e053d0566024
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076NULL34
056f117a-163e-4cd9-acf1-362837c9904aNULLNULL34
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C16
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B0648
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAANULL64
071632d3-65ae-4f13-b45d-e158e46bbf24NULLNULL64

发现结果中不同人不同项目会自动分组合计,因此我们去掉多余的合计数据即可。

三、去掉多余数据

WITH TEMP AS(SELECT UserID,ProjectID,ProBatchesID,WorkHour FROM  MAINTABLE GROUP BYHourFiller,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 /*去掉多余的合计数据*/ 

结果:

UserIDProjectIDProBatchesIDWorkHour
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
0400bb0e-a957-479e-98e0-60c4542eefa6E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
TotalTotalTotal296
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C72
052a3c6e-3a0e-44d2-8d5c-177760d03768E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B06224
TotalTotalTotal296
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e0761accce0a-1d4e-4e73-aa6f-9e2da0337f608
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f3f3e46b-8ca8-44cb-a4b5-5a8970f905ba2
056f117a-163e-4cd9-acf1-362837c9904a53aa4cf1-99bf-46a0-acd6-11fc5b28e076f719e55b-8142-43a7-a865-29e053d0566024
TotalTotalTotal34
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA0C00F223-F9B7-4C23-A762-CC8A23D25F2C16
071632d3-65ae-4f13-b45d-e158e46bbf24E963F8E2-4713-4B7C-A154-CC4ED75A0CAA596BDF31-0038-4C36-AA95-B03F3D9C7B0648
TotalTotalTotal64

四、拓展

 【拓展】如果题目改为:
对每个项目做一个WorkHour的合计,如何运用with rollup实现
①调整groupby顺序(调整后:)

    GROUP BYProjectID ,HourFiller,ProBatchesID 

②调整case when的判空条件(查表后具体问题具体分析)
③调整筛选范围(查表后具体问题具体分析)

【注意】
以下这种情况,虽然数据都被覆盖为Total,但是实际的值还是null,023d991d-e3cb-412b-9226-ec7fca86833c,null,换句话说,SELECT * FROM TABLE WHERE UserID IS NULL 能筛选出最后一条数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ESP32接入国产大模型之文心一言】

1. 怎样接入文心一言 随着人工智能技术的不断发展,自然语言处理领域也得到了广泛的关注和应用。在这个领域中,文心一言作为一款强大的自然语言处理工具,具有许多重要的应用价值。本文将重点介绍如何通过ESP32接入国产大模型之文心一言api&am…

图片中src属性绑定不同的路径

vue3 需求是按钮disable的时候,显示灰色的icon;非disable状态,显示白色的icon 一开始src写成三元表达式,发现不行,网上说src不能写成三元表达式,vue会识别成字符串 最后的解决方案 同时,发现…

软件测试基础理论学习-软件测试概论(流程,bug,测试用例)

测试的流程 也可以理解为测试工程师在软件开发中需要介入的部分,个人总结如下: 需求分析。这个部分主要就是针对需求提出一些不合理的地方,也可以让测试人员对整个软件模型和需求进行整体的掌握和把控,如果出现了不合理的地方&am…

2401d,d随机选择类

原文 我有一个许多类实现的接口,我想随机选择其中一个实现.还有两个约束:首先,不是均匀分布,所有类都可定义被选中的机会(反映在"weight()"函数中).而且根据运行时信息,并非所有类都可用. 我搞了个最小工作示例,但它很重(特别是因为有中间枚举),可更漂亮,更易于理解…

在Cadence中单独添加或删除器件与修改网络的方法

首先需要在设置中使能 ,添加或修改逻辑选项。 添加或删除器件,点击logic-part,选择需要添加或删除的器件,这里的器件必须是PCB中已经有的器件,Refdes中输入添加或删除的器件标号,点击Add添加。 添加完成后就会显示在R1…

基于springboot智慧食堂管理系统源码和论文

随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化,网络化和电子化。网上管理,它将是直接管理“智慧食堂”系统的最新形式。本论文是以构建“智慧食堂”系统为目标,使用java技术制作&…

MATLAB中dlmread函数用法

目录 语法 说明 示例 读取整个带分隔符的文件 读取包含空的分隔字段的文件 从特定行和列偏移量开始读取带分隔符的文件 读取带分隔符的文件中的特定范围 dlmread函数的功能是将 ASCII 分隔的数值数据文件读取到矩阵。 语法 M dlmread(filename) M dlmread(filename,…

uView Calendar 日历

此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。 注意: 此组件与Picker 选择器的日期选择模式有一定的重合之处,区别在于本组件为更专业的日期选择场景,能选择日期范围等。 另外Picker组件的日…

Clickhouse SQL字符串相关

1、列表 列转行 列转行就是将某一没有重复数据的列进行转换之后变成可以与其他数据对应起来的有重复数据的列 列转行,将一个字段中的多值按某分隔符进行炸开,分为多行 arrayJoin(splitByString(,, cast(data_detail as String))) AS col行转…

odoo17 | 基本视图

前言 我们在上一章中已经看到Odoo能够为给定模型生成默认视图。在实践中,默认视图是绝对不可接受的用于商业应用程序。相反,我们至少应该以逻辑方式组织各种字段。 视图在带有动作和菜单的XML文件中定义。它们是ir.ui.view模型的实例。 在我们的房地产…

OpenHarmony从入门到放弃(一)

OpenHarmony从入门到放弃(二) 一、OpenHarmony的基本概念和特性 OpenHarmony是由开放原子开源基金会孵化及运营的开源项目,其目标是构建一个面向全场景、全连接、全智能的时代的智能终端设备操作系统。 分布式架构 OpenHarmony采用分布式…

Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件

随着远程工作和云技术的普及,对于高效安全的远程访问和管理服务器变得至关重要。Termius,一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件,正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案,允许用户通过单一平…

什么是Alibaba Cloud Linux?完全兼容CentOS,详细介绍

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

如何修复卡在恢复模式的Android 手机并恢复丢失的数据

Android 系统恢复是一项内置功能,如果您的 Android 设备无法正常工作或触摸屏出现问题,该功能会很有帮助。您可以启动进入恢复模式并使用它来恢复出厂设置您的 Android 设备,而无需访问设置。此外,它还经常用于重新启动系统、从 A…

使用生成式AI查询大型BI表

在拥有大量表格形式数据的组织中,数据分析师的工作是通过提取、转换和围绕数据构建故事来理解这些数据。 分析师访问数据的主要工具是 SQL。 鉴于大型语言模型 (LLM) 令人印象深刻的功能,我们很自然地想知道人工智能是否可以帮助我们将信息需求转化为格式…

网站的数据是如何收集和分析的?

数据采集的方法: 1、API API又叫应用程序接口,是网站的管理者为了使用者方便,编写的一种程序接口。该类接口可以屏蔽网站底层复杂算法仅仅通过简单的调用即可实现对数据请求的功能。目前主流的社交媒体,比如微博、贴吧等均可提供…

链表--160. 相交链表/easy

160. 相交链表 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向…

Rust 常用的第三方库

Rust 的标准库虽然已经很强大,但如果恰当地使用第三方库,可以大大改善编程效率。以下是一些常用的 Rust 第三方库。 tokio ---- 最通用的异步编程库,几乎可以说是行业标准了,大量的其它库依赖于tokio。reqwest ---- HTTP 客户端库…

【面试高频算法解析】算法练习4 滑动窗口

目录 前言算法解析练习题长度最小的子数组无重复字符的最长子串找到K个最接近的元素 前言 本篇章开放目的是按算法类型学习算法,学习对应算法理论,并通过练习一些经典算法题深入理解这类算法,避免出现刷了很多算法题,还是一知半解…

Centos自定义命令循环执行脚本

一.vim创建文件 vim batch.sh 进入空文件中,粘贴以下内容 #!/bin/bash echo "开始执行 start" for i in {30000..32767}; do echo "正在执行第 $i 次" firewall-cmd --zonepublic --add-port$i/tcp --permanent done ESC后 :w保存…