SQL简化,月汇总+日汇总

hokor 2010-07-29 10:26:41
想获取月初到当日的累积值,以及当日的汇总值。
自己写了一个是先求出月汇总再求出日汇总,在拼起来。有没有简单点的方法?
实际汇总的逻辑比下面要复杂的多,但是月汇总月日汇总仅有时间条件的取值不同。
IF OBJECT_ID('tempdb..#TB') IS NOT NULL
DROP TABLE #TB
GO
SELECT 20100729 DATE,'A' [TYPE],1000.0 [MONEY] INTO #TB UNION ALL
SELECT 20100729 ,'B' ,2000.0 UNION ALL
SELECT 20100728 ,'A' ,1100.0 UNION ALL
SELECT 20100728 ,'B' ,2100.0 UNION ALL
SELECT 20100727 ,'A' ,1200.0 UNION ALL
SELECT 20100727 ,'B' ,2200.0 UNION ALL
SELECT 20100726 ,'A' ,1300.0 UNION ALL
SELECT 20100726 ,'B' ,2300.0
GO
SELECT * FROM #TB

--结果,此结构是否可以简化?
SELECT m.[TYPE],m.[本月累计],d.[当日收入]
FROM (SELECT [TYPE],SUM(MONEY) [本月累计] FROM #TB
WHERE DATE BETWEEN 20100701 AND 20100729
GROUP BY TYPE) m
JOIN (SELECT [TYPE],SUM(MONEY) [当日收入]FROM #TB
WHERE DATE = 20100729
GROUP BY TYPE) d
ON m.type = d.type
...全文
55 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hokor 2010-07-29
  • 打赏
  • 举报
回复
谢了,竟然没想到。。。。。
guguda2008 2010-07-29
  • 打赏
  • 举报
回复
IF OBJECT_ID('tempdb..#TB') IS NOT NULL
DROP TABLE #TB
GO
SELECT 20100729 DATE,'A' [TYPE],1000.0 [MONEY] INTO #TB UNION ALL
SELECT 20100729 ,'B' ,2000.0 UNION ALL
SELECT 20100728 ,'A' ,1100.0 UNION ALL
SELECT 20100728 ,'B' ,2100.0 UNION ALL
SELECT 20100727 ,'A' ,1200.0 UNION ALL
SELECT 20100727 ,'B' ,2200.0 UNION ALL
SELECT 20100726 ,'A' ,1300.0 UNION ALL
SELECT 20100726 ,'B' ,2300.0
GO
SELECT * FROM #TB

--结果,此结构是否可以简化?
SELECT m.[TYPE],m.[本月累计],d.[当日收入]
FROM (SELECT [TYPE],SUM(MONEY) [本月累计] FROM #TB
WHERE DATE BETWEEN 20100701 AND 20100729
GROUP BY TYPE) m
JOIN (SELECT [TYPE],SUM(MONEY) [当日收入]FROM #TB
WHERE DATE = 20100729
GROUP BY TYPE) d
ON m.type = d.type

SELECT TYPE
,[本月累计]=SUM(CASE WHEN DATE BETWEEN 20100701 AND 20100729 THEN MONEY ELSE 0 END)
,[当日收入]=SUM(CASE WHEN DATE = 20100729 THEN MONEY ELSE 0 END)
FROM #TB
GROUP BY TYPE
/*
DATE TYPE MONEY
----------- ---- ---------------------------------------
20100729 A 1000.0
20100729 B 2000.0
20100728 A 1100.0
20100728 B 2100.0
20100727 A 1200.0
20100727 B 2200.0
20100726 A 1300.0
20100726 B 2300.0

TYPE 本月累计 当日收入
---- --------------------------------------- ---------------------------------------
A 4600.0 1000.0
B 8600.0 2000.0

TYPE 本月累计 当日收入
---- --------------------------------------- ---------------------------------------
A 4600.0 1000.0
B 8600.0 2000.0

*/

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧