想用一条SQL语句对一个字段作几次条件不同的汇总,不知该怎么写?

时间:2022-01-09 01:02:22
感觉WHERE子句里的条件对SELECT子句中的汇总函数都一样的,但我想对一个字段对几次条件不同的汇总,能用一条语句完成吗?

比如查出一年中每个月销售总额

10 个解决方案

#1


假设你的表结构如下:销售数量,月份,年份
每次销售都有一条纪录。

select sum(销售数量) where 年份=2003 group by 月份

没测试,应该是这样的

#2


我没有使用月份和年份这两个字段,而是只有具体日期。

#3


CREATE TABLE #aa (COL1 DATETIME,SALES INT)

INSERT INTO #aa VALUES('2003-1-1',600)
INSERT INTO #aa VALUES('2003-1-3',600)
INSERT INTO #aa VALUES('2003-2-1',200)
INSERT INTO #aa VALUES('2003-3-1',100)
INSERT INTO #aa VALUES('2003-3-10',200)
INSERT INTO #aa VALUES('2003-4-1',600)
INSERT INTO #aa VALUES('2003-4-5',500)
INSERT INTO #aa VALUES('2003-4-9',300)

SELECT DATEPART(MM,COL1) AS 月份,SUM(SALES) AS 销量
FROM #aa WHERE DATEPART(YY,COL1) ='2003' GROUP BY DATEPART(MM,COL1)

DROP TABLE #aa

#4


假设表结构是:销售数量,销售单价,日期

select sum(销售数量*销售单价) as 销售总额,month(日期) as 月份 where year(日期)='2003' order by 月份

#5


我是想把十二个月作为十二个汇总字段来显示,而不是十二条记录。
而是以若干个销售部门作为不同记录。这样该怎么写?我觉得应该用子查询来写。但不知该怎么写

#6


group by语句啊

#7


不是这么简单吧,我说了,十二个月代表十二个汇总字段的日期条件不一样,怎么写进一条语句

#8


我是说十二个销售总额字段的日期条件不一样

#9


SELECT SUM(A.*),SUM(B.*).........,SUM(L.*)
FROM 
(SELECT * FROM TABLE 
WHERE MONTH=1) A,
(SELECT * FROM TABLE 
WHERE MONTH=2) B,
(SELECT * FROM TABLE 
WHERE MONTH=3) C,
.
.
.
(SELECT * FROM TABLE 
WHERE MONTH=12) L

#10


首先楼上的是可以实现的,假设日期 RQ(20030101),销售额amount
可以用sum(case  when substring(rq,3,2)='01' then amount else 0 end) as 一月,
case  when substring(rq,3,2)='02' then amount else 0 end) as 二月
..........................................

#1


假设你的表结构如下:销售数量,月份,年份
每次销售都有一条纪录。

select sum(销售数量) where 年份=2003 group by 月份

没测试,应该是这样的

#2


我没有使用月份和年份这两个字段,而是只有具体日期。

#3


CREATE TABLE #aa (COL1 DATETIME,SALES INT)

INSERT INTO #aa VALUES('2003-1-1',600)
INSERT INTO #aa VALUES('2003-1-3',600)
INSERT INTO #aa VALUES('2003-2-1',200)
INSERT INTO #aa VALUES('2003-3-1',100)
INSERT INTO #aa VALUES('2003-3-10',200)
INSERT INTO #aa VALUES('2003-4-1',600)
INSERT INTO #aa VALUES('2003-4-5',500)
INSERT INTO #aa VALUES('2003-4-9',300)

SELECT DATEPART(MM,COL1) AS 月份,SUM(SALES) AS 销量
FROM #aa WHERE DATEPART(YY,COL1) ='2003' GROUP BY DATEPART(MM,COL1)

DROP TABLE #aa

#4


假设表结构是:销售数量,销售单价,日期

select sum(销售数量*销售单价) as 销售总额,month(日期) as 月份 where year(日期)='2003' order by 月份

#5


我是想把十二个月作为十二个汇总字段来显示,而不是十二条记录。
而是以若干个销售部门作为不同记录。这样该怎么写?我觉得应该用子查询来写。但不知该怎么写

#6


group by语句啊

#7


不是这么简单吧,我说了,十二个月代表十二个汇总字段的日期条件不一样,怎么写进一条语句

#8


我是说十二个销售总额字段的日期条件不一样

#9


SELECT SUM(A.*),SUM(B.*).........,SUM(L.*)
FROM 
(SELECT * FROM TABLE 
WHERE MONTH=1) A,
(SELECT * FROM TABLE 
WHERE MONTH=2) B,
(SELECT * FROM TABLE 
WHERE MONTH=3) C,
.
.
.
(SELECT * FROM TABLE 
WHERE MONTH=12) L

#10


首先楼上的是可以实现的,假设日期 RQ(20030101),销售额amount
可以用sum(case  when substring(rq,3,2)='01' then amount else 0 end) as 一月,
case  when substring(rq,3,2)='02' then amount else 0 end) as 二月
..........................................