-
一个SQL 分组统计的SQL语句,困住了,看看怎么实现3
原始表数据结构
名称 数量 单价 总金额
根1 500 500 250000
子1 100 500 50000
子2 100 500 50000
子3 100 500 50000
子4 100 500 50000
子5 100 500 50000
根2 300 50 15000
根2_子1 100 50 5000
根2_子2 100 50 5000
根2_子3 100 50 5000
根3 0 0 0
查询后得到以下结果:
名称 数量 单价 总金额
根1 500 500 250000
子1 100 500 50000
子2 100 500 50000
子3 100 500 50000
子4 100 500 50000
合计 500 2500 250000
根2 300 50 15000
根2_子1 100 50 5000
根2_子2 100 50 5000
根2_子3 100 50 5000
合计 300 150 15000
根3 0 0 0
这里主要是,根和子是父子关系,表里面有个 PID ,统计时只要统计子的合计
问题补充:hudingchen 写道你数据是不是有问题,我理解原表数据应该
根1 500 500 250000 根1_子1 100 500 50000 根1_子2 100 500 50000 根1_子3 100 500 50000 根1_子4 100 500 50000 根1_子5 100 500 50000 根2 300 50 15000 根2_子1 100 50 5000 根2_子2 100 50 5000 根2_子3 100 50 5000 根3 0 0 0
是的,就是这样
问题补充:hudingchen 写道SELECT CASE WHEN RIGHT(m.rootName, 1) = '_' THEN '合计' ELSE m.rootName END rootName, m.amount, m.price, m.total_amount FROM (SELECT SUBSTRING(t.root_name, 1, CHARINDEX('_', t.root_name)) AS rootName, SUM(amount) amount, SUM(price) price, SUM(total_amount) total_amount FROM hudc.dbo.test t WHERE CHARINDEX('_', t.root_name) > 0 GROUP BY SUBSTRING(t.root_name, 1, CHARINDEX('_', t.root_name)) UNION ALL SELECT t2.* FROM hudc.dbo.test t2) m ORDER BY CASE WHEN RIGHT(m.rootName, 1) = '_' THEN m.rootName + '子子' ELSE m.rootName END
首先谢谢你的回答,
我现在的问题是,父跟子的关系是通过pid来控制的,跟root_name没有关系的,就没有‘_’ 这种规则在,我把SQL 贴给你看看,
CREATE TABLE [dbo].[test] (
[id] [int] NULL ,
[text] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[pid] [int] NULL ,
[size] [int] NULL ,
[price] [float] NULL ,
[totalPrice] [float] NULL
) ON [PRIMARY]
GO
insert test(id,text,pid,size,price,totalPrice) values( 1 , '根1' , 0 , 50 , 500.0 , 25000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 2 , '子11' , 1 , 10 , 500.0 , 5000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 3 , '子12' , 1 , 30 , 500.0 , 15000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 4 , '子13' , 1 , 10 , 500.0 , 5000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 5 , '根2' , 0 , 60 , 400.0 , 24000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 6 , '子21' , 5 , 15 , 400.0 , 6000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 7 , '子22' , 5 , 25 , 400.0 , 10000.0 )
insert test(id,text,pid,size,price,totalPrice) values( 8 , '子23' , 5 , 20 , 400.0 , 8000.0 )
2011年5月30日 16:25
4个答案 按时间排序 按投票排序
-
采纳的答案
你这个属于层次查询了,如果父子关系就是两层的话,可以这么写
SELECT m.* FROM (SELECT 'x' id, '合计' text, t1.pid, SUM(t1.size) size, SUM(t1.price) price, SUM(t1.totalPrice) totalPrice FROM hudc.dbo.test2 t1 WHERE t1.pid > 0 GROUP BY t1.pid UNION ALL SELECT CAST(t2.id AS VARCHAR), t2.text, t2.pid, t2.size, t2.price, t2.totalPrice FROM hudc.dbo.test2 t2) m ORDER BY CASE WHEN CAST(m.pid AS VARCHAR) = '0' THEN CAST(m.id AS VARCHAR) ELSE CAST(m.pid AS VARCHAR) + '_' + CAST(m.id AS VARCHAR) END
如果层数不固定的话,在sql 2000下不好实现,sql 2005提供了层次查询函数。2011年5月31日 20:32
-
SELECT CASE WHEN RIGHT(m.rootName, 1) = '_' THEN '合计' ELSE m.rootName END rootName, m.amount, m.price, m.total_amount FROM (SELECT SUBSTRING(t.root_name, 1, CHARINDEX('_', t.root_name)) AS rootName, SUM(amount) amount, SUM(price) price, SUM(total_amount) total_amount FROM hudc.dbo.test t WHERE CHARINDEX('_', t.root_name) > 0 GROUP BY SUBSTRING(t.root_name, 1, CHARINDEX('_', t.root_name)) UNION ALL SELECT t2.* FROM hudc.dbo.test t2) m ORDER BY CASE WHEN RIGHT(m.rootName, 1) = '_' THEN m.rootName + '子子' ELSE m.rootName END
2011年5月30日 23:26
-
你数据是不是有问题,我理解原表数据应该
根1 500 500 250000 根1_子1 100 500 50000 根1_子2 100 500 50000 根1_子3 100 500 50000 根1_子4 100 500 50000 根1_子5 100 500 50000 根2 300 50 15000 根2_子1 100 50 5000 根2_子2 100 50 5000 根2_子3 100 50 5000 根3 0 0 0
2011年5月30日 17:15
相关推荐
当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个Java源码工具,能够帮助用户便捷地将Oracle SQL语句转换为MySQL SQL语句。 Oracle SQL与MySQL SQL的主要...
在本文中,我们将深入探讨如何使用SQL语句实现分组小计统计,这是一个常见的需求,尤其是在数据分析、报表生成和业务洞察领域。我们将基于提供的部分代码示例,详细解释其背后的逻辑和技术要点。 ### SQL实现分组小...
在压缩包子文件的文件名"ms转sql语句.exe"中,我们可以推测这可能是一个用于将SQL Server语句转换为Oracle兼容格式的可执行程序。这样的工具通常会提供用户友好的界面,让用户导入SQL Server的数据库元数据,然后...
sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明...
本话题将详细讲解一个简单的SQL循环语句脚本及其相关知识。 一、SQL循环语句概述 SQL循环语句主要包括WHILE循环和FOR循环,它们允许我们在满足特定条件时重复执行一段代码块。在PL/SQL和T-SQL中,还有BEGIN-END...
在压缩包文件"sql_ok"中,可能包含了这样一个工具的安装程序或使用教程,可以帮助你开始探索和利用SQL语句生成器的便利性。 总之,SQL语句生成器是数据库开发者的得力助手,它能简化SQL编写,提高代码质量,降低...
总之,SQLTracker作为一个强大的SQL监控工具,对于数据库管理和优化工作具有重要作用。通过深入理解和有效利用SQLTracker,我们可以更有效地管理和维护数据库系统,确保其高效、稳定地运行。同时,它也有助于提升...
在SQL Server 2000中,分组统计是一个核心的查询功能,它允许数据库管理员和开发者对数据进行聚合操作,以获取特定字段的汇总信息。分组统计通常涉及GROUP BY语句,配合COUNT(), SUM(), AVG(), MAX() 和 MIN()等聚合...
sqlserver 分组合并字符串 分组统计数量
接下来,我们再看一个更复杂的例子,即如何将一个SQL Server实例中的数据插入到另一个SQL Server实例的表中。假设需要将192.168.1.2的SQL Server实例(数据库名为TT)中表test2的数据插入到192.168.1.1的SQL Server...
XML 查询语句转换成 SQL 语句的实现 本文主要讨论将 XML 查询语句转换成 SQL 语句的实现。XML 已经成为 Internet 上数据交换的事实标准,特别是在 Web 数据挖掘技术中,对数据源的结构化需求导致人们对 XML 文档的...
在SQL语言中,可以使用Select isnull(sum(字段名),0)来实现统计函数。 七、数据窗口SQL脚本中 在PB脚本中,可以使用Where后跟的条件语句:Int型字段名=DATEPART(yyyy,getdate())*100+DATEPART(month,getdate())来...
利用SQL的`WHERE`子句进行条件筛选,`GROUP BY`进行分组统计,`HAVING`过滤分组结果,配合`CASE`表达式实现复杂的逻辑判断,满足多样化的业务需求。 5. **SQL Server特性**: - SQL Server提供了许多高级特性,如...
非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK 非常好用的SQL Server 抓取SQL语句工具HOOK
4. **分组查询**:使用GROUP BY子句将结果按一个或多个列进行分组。例如: ```sql SELECT ColumnName1, COUNT(*) FROM TableName GROUP BY ColumnName1; ``` 这将返回每种ColumnName1的行数。 5. **聚合函数**...
"标签"进一步强调了这个工具的关键特性,包括"Java输出漂亮的SQL语句",这意味着它是一个Java环境下的解决方案,能够集成到Java项目中,通过Java代码来调用和实现SQL语句的格式化。另一个标签"SQL格式化"则明确了它...
在这个名为“SQL语句SQL语句.zip”的压缩包中,包含了一个名为“SQL语句.sql”的文件,很可能是包含了一系列SQL查询和其他数据库操作的脚本。 SQL主要分为以下几个部分: 1. 数据查询(DQL):这是SQL最基础的功能...
此查询返回了每个查询的数据库ID、SQL语句文本、执行次数、计划生成次数、最近一次执行时间以及与资源消耗相关的统计数据。排序按总工作时间降序排列,以便快速识别最耗资源的查询。 ### 2. 查询缓存计划 另一个...
sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句sql注入语句...
虽然没有具体的源代码或文档在“framework3”这个压缩子文件中,我们可以推测这可能是一个框架或者库的名字,它包含了实现SQL语句拼接功能的相关类和方法。开发者可以通过导入和使用这个框架,轻松地在自己的Java...