在 SQL 中使用累积需求时在聚合级别上优化表概览

2024-04-11

我试图找到最好的方法来获得累积显示的总体概述的概述,即通过扣除不满足每个步骤中的累积要求的观察结果。

这是表脚本和示例数据:

CREATE TABLE #Table_A(
   id           INTEGER  NOT NULL PRIMARY KEY 
  ,totalAmount  INTEGER  NOT NULL
  ,requirement1 VARCHAR(6) NOT NULL
  ,requirement2 INTEGER  NOT NULL
  ,requirement3 BIT  NOT NULL
  ,requirement4 VARCHAR(10) NOT NULL
);
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (1,6580,'GROUP1',100,0,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (2,3667,'GROUP1',100,1,'PRODUKTION');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (3,2907,'GROUP1',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (4,5271,'GROUP2',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (5,91630,'GROUP1',200,0,'PRODUKTION');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (6,9925,'GROUP1',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (7,4730,'GROUP1',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (8,5171,'GROUP2',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (9,1250,'GROUP1',100,1,'TEST');
INSERT INTO #Table_A(id,totalAmount,requirement1,requirement2,requirement3,requirement4) VALUES (10,11223,'GROUP1',100,1,'TEST');

这是我想要实现的概述:

+------+-------------+-------+-----------+
| step | totalAmount | total |  comment  |
+------+-------------+-------+-----------+
| 1    | 40282       | 7     | comment 1 |
| 2    | 30035       | 5     | comment 2 |
| ...  | ...         | ...   | ...       |
| n    | X           | Y     | comment n |
+------+-------------+-------+-----------+

最后,这是我到目前为止所做的 SQL 代码:

-- drop tables if they exists
drop table if exists #table_step1
drop table if exists #table_step2

-- select data from the different steps
-- select data step 1
select *
into #table_step1
from #Table_A
where
    requirement1 = 'GROUP1'
    and requirement2 = 100

-- select data step 2
select * 
into #table_step2
from #table_step1
where 
    requirement3 = 1
    and requirement4 = 'TEST'
...

-- aggregate the data for each step and use UNION ALL to get overall overview
select 1 as step, sum(totalAmount) as totalAmount, count(*) as total, 'comment 1' as comment
from #table_step1

UNION ALL

select 2 as step, sum(totalAmount) as totalAmount, count(*) as total, 'comment 2' as comment
from #table_step2 

UNION ALL 
...

我建议的避免重复代码的解决方案是创建一个 #step 表,您将在其中对 n 个步骤中的每个步骤进行需求检查(如果未在每种情况下进行检查,则为 NULL),然后使用 while 循环插入到最终的 #results 表中你需要什么(实际上每次迭代都与所有行的并集相同)

create table #result (step int,totalAmount bigint,total bigint,comment varchar(max))

create table #step(
    step int
    ,comment_text varchar(max)
    ,requirement1 VARCHAR(6) NULL
    ,requirement2 INTEGER  NULL
    ,requirement3 BIT  NULL
    ,requirement4 VARCHAR(10) NULL)

-- Note: initially you have NOT NULL on all requirements: So you can use NULL when a step does not need to check the requirement
insert #step values 
    (1,'comment 1','GROUP1',100,NULL,NULL),
    (2,'comment 2','GROUP1',NULL,1,'TEST')

declare @step int=1

while(@step<=2)
begin
    insert #result
        select @step, sum(a.totalAmount), count(*) as total, max(s.comment_text)
        from #step s
        inner join #Table_A a on 
            (s.requirement1 is null or s.requirement1=a.requirement1)
        and (s.requirement2 is null or s.requirement2=a.requirement2)
        and (s.requirement3 is null or s.requirement3=a.requirement3)
        and (s.requirement4 is null or s.requirement4=a.requirement4)
        where s.step=@step
    set @step+=1
end

我对此进行了测试,它的 #result 与您的规范一致(不过,我假设您在步骤 2 中省略了requirement1='GROUP1')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL 中使用累积需求时在聚合级别上优化表概览 的相关文章

  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 选择具有 SQL Server XML 列类型的特定行

    我正在尝试从类似于以下定义的表中选择数据 Column Data Type Id Int DataType Int LoggedData XML 但我只想选择具有特定 DataType 值并且在 LoggedData 列中包含字符串 或评估
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • 如何在 SQL Server 存储过程中对用户定义的表类型执行 ForEach?

    XX PROCEDURE dbo XXX X dbo IntType readonly AS BEGIN SET NOCOUNT ON how can I foreach X here and do process individually
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 将表数据从一个 SQL Server 导出到另一台 SQL Server

    我有两个 SQL Server 都是 2005 版本 我想将多个表从一个表迁移到另一个表 我努力了 在源服务器上 我右键单击数据库 选择Tasks Generate scripts 问题是在下面Table View options没有Scr
  • SQL Server 2014 安装中缺少 SQL Server Integration Services

    我正在尝试使用 Integration Services 安装 SQL Server 2014 Here https www microsoft com en US download details aspx id 42299是我以前用工具
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation

随机推荐

  • SSL23_GET_SERVER_HELLO:未知协议[连接到msa(587)端口]

    当新用户注册并忘记密码时 我正在尝试发送电子邮件 我正在 Linux 上工作 该应用程序是使用 node js 开发的 Error Error 140020013401920 error 140770FC SSL routines SSL2
  • d3js 将标签移动到节点旁边

    我正在开发一个通过图表进行模式表示的项目 我来从 json 检索数据以生成图形并找到与节点关联的标签 我还想找到与链接对应的标签 但是 当移动节点时 我无法移动标签 有什么帮助吗 请参阅此处的代码 http jsfiddle net obo
  • Matlab 中行索引的笛卡尔积

    我有一个二进制矩阵A维度的mxn with m gt n在Matlab中 我想构造一个矩阵B维度的cxn按行列出包含在中的行索引的笛卡尔积的每个元素A 为了更清楚地考虑以下示例 例子 m 4 n 3 A 1 0 1 0 0 1 1 1 0
  • 如何解决 JDK 17 中 Field.setAccessible 的 InaccessibleObjectException?

    使用 JDK 17 不可能再使用反射来访问字段 至少对于java lang 课程 以下片段 final Process process new ProcessBuilder directory new File d temp command
  • 使用 Geoplugin 旋转链接

    我使用 geoplugin class 将 CA 用户重定向到特定链接 现在 该代码仅允许我将用户重定向到 1 个网站 我想修改此代码 以便我可以将用户重定向到 link1 com link2 com link3 com 有人对此有快速修改
  • copy.deepcopy 与 pickle

    我有一个小部件的树结构 例如集合包含模型 模型包含小部件 我想复制整个收藏 copy deepcopy与 pickle and de pickle 对象相比更快 但用 C 编写的 cPickle 更快 因此 为什么我 我们 不应该总是使用
  • iOS项目:静态/动态代码分析和调用图

    我正在寻找一些适用于 iOS 项目的方便的代码分析工具 尤其是 进行静态分析 动态分析并生成调用图 到目前为止 在我的调查中 我发现 dtrace 解释如下here https stackoverflow com questions 107
  • 如何在Python中使用编码utf-8.py代替cp1252.py

    我编写了一个非常小的程序 当该行包含某个字符串时 它将一个文件的所有行复制到另一个文件 这是完整的来源 f in open all txt r f out open all out w for line in f in if
  • 如何获取Windows 7主题名称

    Windows 7 附带多个内置主题 可以通过右键单击桌面并选择个性化来访问它们 在个性化下 有一个名为 航空主题 的部分 其中包含 建筑 自然 等主题 我尝试使用 uxtheme dll 的 GetCurrentThemeName 但它实
  • Java UDP 服务器,并发客户端

    下面的代码足以接受并发 UDP 传输吗 更具体地说 如果 2 个客户端同时传输 当我调用 receive 时 DatagramSocket 会将传输排队并一一传送它们 还是只有一个能够通过 DatagramSocket socket new
  • MySQL 将布尔字段计为两个不同的列

    认为我有一个包含两个字段的表 ID and State 状态值 即布尔值 可以是 0 或 1 ID不是唯一的 因此该表如下所示 ID State 1 true 1 false 2 false 3 true 1 true 现在 我想对按 ID
  • Python3.3 HTML Client TypeError: 'str' 不支持缓冲区接口

    import socket Set up a TCP IP socket s socket socket socket AF INET socket SOCK STREAM Connect as client to a selected s
  • Gradle 同步任务,同步到文件夹但忽略目标中的指定目录

    我想将驱动器上的一个文件夹与另一个包含我想要保留的名为 logs 的文件夹的文件夹同步 使困惑 这是一个图表 C mydir sync this folder someotherfiles txt anotherDir into this
  • c, obj c 没有标签或标识符的枚举

    我正在学习 cocos2d iPhone 上目标 C 的 open gl 包装器 现在玩精灵在一个示例中发现了这一点 enum easySprite 0x0000000a mediumSprite 0x0000000b hardSprite
  • 如何确定 akka 中生成的 actor 数量?

    我最近开始研究 Akka 2 0 框架 并且能够运行一些代码 生成执行简单 Oracle 数据库调用 执行简单计算等的 Actor 但是在生产中什么也没有 我想知道的是 是否有一般的经验法则或最佳实践来确定为某些类型的任务生成多少个参与者
  • 无法在同一页面设置PHP cookie

    我在同一页面上设置 cookie 时遇到问题 我在我的网站上使用了 cookie 它工作正常 我倾向于将 php 设置为单独的文件 现在 我在同一页面上设置 cookie 但它似乎不起作用 expire time 5 setcookie r
  • 如何使用 JSP 页面中的参数运行 java 类?

    我之前编写了一个从 bash 文件执行的 java 类 现在我需要使用 Javascript HTML 按钮允许它从 JSP 页面执行 我想知道如何做到这一点 首先 我的课程是这样的 public class Sync public sta
  • WCF .svc 文件在 IIS7.5 .NET 4.0 中用作纯文本 - 不在默认网站下

    最终更新 事实证明 由于 DotNetNuke 模块的压缩问题 这是一个转移注意力的问题 我必须添加到 PageBlaster DNN 模块 所以这不再是问题 我正在将 WCF svc 文件部署到我的实时网站 http www pokerd
  • 无法打开输入文件:localhost:8080

    在 Windows 上 要从命令提示符运行 PHP Web 服务器 我键入 php s localhost 80800 t public 我收到此错误 无法打开输入文件 localhost 8080 And yet cmd php test
  • 在 SQL 中使用累积需求时在聚合级别上优化表概览

    我试图找到最好的方法来获得累积显示的总体概述的概述 即通过扣除不满足每个步骤中的累积要求的观察结果 这是表脚本和示例数据 CREATE TABLE Table A id INTEGER NOT NULL PRIMARY KEY totalA