统计是按日统计的,最后有个总计功能,把这个月所有的都做个总计数据是类似这样的:日期 销量 价格
2012-01-01 100 5
2012-01-02 150 10
2012-01-03 175 20
2012-01-04 200 30查询出的表格是这样的:日期 销售额
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500能不能让数据库查询结果一次性就返回1~4号4天的结果和这4天的总计总不可能程序里面写个循环,然后里面一个个查吧..我晕死真的没啥思路了
2012-01-01 100 5
2012-01-02 150 10
2012-01-03 175 20
2012-01-04 200 30查询出的表格是这样的:日期 销售额
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500能不能让数据库查询结果一次性就返回1~4号4天的结果和这4天的总计总不可能程序里面写个循环,然后里面一个个查吧..我晕死真的没啥思路了
IF NOT OBJECT_ID('表') IS NULL
DROP TABLE 表
GO
CREATE TABLE 表([日期] DATETIME,[销量] INT,[价格] INT)
INSERT 表
SELECT '2012-01-01',100,5 UNION ALL
SELECT '2012-01-02',150,10 UNION ALL
SELECT '2012-01-03',175,20 UNION ALL
SELECT '2012-01-04',200,30
GO
SELECT CONVERT(VARCHAR(10),日期,120) AS 日期,销量*价格 AS 销售额 FROM 表
UNION ALL
SELECT '总计',SUM(销量*价格) AS 销售额 FROM 表
union all
select 日期 = '总计', sum(销量*价格) 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04'
-- 日期 销量 价格
--2012-01-01 100 5
--2012-01-02 150 10
--2012-01-03 175 20
--2012-01-04 200 30 if OBJECT_ID('tb') is not null
drop table tb
go
create table tb (日期 varchar(50),销量 int, 价格 int)
insert into tb
select '2012-01-01',100,5 union all
select '2012-01-02',150,10 union all
select '2012-01-03',175,20 union all
select '2012-01-04',200,30
--查询出的表格是这样的:--日期 销售额
--2012-01-01 500
--2012-01-02 1500
--2012-01-03 3500
--2012-01-04 6000
--总计 11500 select 日期,(销量*价格)as 销售额 from tb
union all
select '总计',sum(销量*价格)as 销售额 from tb日期 销售额
-------------------------------------------------- -----------
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500(5 行受影响)
insert into tb values('2012-01-01', 100 ,5)
insert into tb values('2012-01-02', 150 ,10)
insert into tb values('2012-01-03', 175 ,20)
insert into tb values('2012-01-04', 200 ,30)
goselect convert(varchar(10),日期,120) 日期, 销量*价格 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04'
union all
select 日期 = '总计', sum(销量*价格) 销售额 from tb where 日期 between '2012-01-01' and '2012-01-04'
drop table tb/*
日期 销售额
---------- -----------
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500(所影响的行数为 5 行)
*/
union all
select 日期 = '总计', sum(销量*价格) 销售额 from 表 where 日期 between '2012-01-01' and '2012-01-04'
if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Datetime,[销量] int,[价格] int)
Insert #T
select '2012-01-01',100,5 union all
select '2012-01-02',150,10 union all
select '2012-01-03',175,20 union all
select '2012-01-04',200,30
Go
Select
[日期]=case when GROUPING(CONVERT(varchar(7),[日期],120))=1 then '总计'
else CONVERT(varchar(10),[日期],120)end,
销售额=SUM([销量]*[价格])
from #T
group by CONVERT(varchar(7),[日期],120),[日期] with rollup
having GROUPING(CONVERT(varchar(7),[日期],120))=1 or GROUPING([日期])=0/*
日期 销售额
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500
*/
-- 日期 销量 价格
--2012-01-01 100 5
--2012-01-02 150 10
--2012-01-03 175 20
--2012-01-04 200 30 if OBJECT_ID('tb') is not null
drop table tb
go
create table tb (日期 varchar(50),销量 int, 价格 int)
insert into tb
select '2012-01-01',100,5 union all
select '2012-01-02',150,10 union all
select '2012-01-03',175,20 union all
select '2012-01-04',200,30
--查询出的表格是这样的:--日期 销售额
--2012-01-01 500
--2012-01-02 1500
--2012-01-03 3500
--2012-01-04 6000
--总计 11500 select 日期,(销量*价格)as 销售额 from tb
union all
select '总计',sum(销量*价格)as 销售额 from tb日期 销售额
-------------------------------------------------- -----------
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500(5 行受影响)
declare @t table (日期 datetime,销量 int,价格 int)
insert into @t
select '2012-01-01',100,5 union all
select '2012-01-02',150,10 union all
select '2012-01-03',175,20 union all
select '2012-01-04',200,30select isnull(convert(varchar(10),日期,120),'总计') as 日期,
sum(销量*价格) as 销售额 from @t group by 日期 with rollup
/*
日期 销售额
---------- -----------
2012-01-01 500
2012-01-02 1500
2012-01-03 3500
2012-01-04 6000
总计 11500
*/
每次订单就1件,不用考虑多件的问题日期 产地
2012-01-01 0:05:35 CN
2012-01-01 0:07:35 CN
2012-01-01 1:09:35 US
2012-01-01 4:05:35 CN
2012-01-02 0:06:35 US
2012-01-02 0:07:35 US
2012-01-03 5:07:43 CN
2012-01-03 0:06:35 US
2012-01-04 6:02:52 US
...要计算的是任何产地的量和产地是US的量
返回:日期 All US
2012-01-01 4 1
2012-01-02 2 2
2012-01-03 2 1
2012-01-04 1 1ALL就是不管是cn还是us都计算进去,us是只算us的本来想举个简单例子来让自己举一反三,但是日期这里不能一起啊时间不同无法group by先谢谢各位了
insert into tb values('2012-01-01 0:05:35', 'CN')
insert into tb values('2012-01-01 0:07:35', 'CN')
insert into tb values('2012-01-01 1:09:35', 'US')
insert into tb values('2012-01-01 4:05:35', 'CN')
insert into tb values('2012-01-02 0:06:35', 'US')
insert into tb values('2012-01-02 0:07:35', 'US')
insert into tb values('2012-01-03 5:07:43', 'CN')
insert into tb values('2012-01-03 0:06:35', 'US')
insert into tb values('2012-01-04 6:02:52', 'US')
goselect convert(varchar(10),日期,120) 日期,
count(1) [All],
sum(case when 产地 = 'US' then 1 else 0 end) [US],
sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
group by convert(varchar(10),日期,120)
/*
日期 All US CN
---------- ----------- ----------- -----------
2012-01-01 4 1 3
2012-01-02 2 2 0
2012-01-03 2 1 1
2012-01-04 1 1 0(所影响的行数为 4 行)
*/
select convert(varchar(10),日期,120) 日期,
count(1) [All],
sum(case when 产地 = 'US' then 1 else 0 end) [US],
sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
group by convert(varchar(10),日期,120)
union all
select '合计' ,
count(1) [All],
sum(case when 产地 = 'US' then 1 else 0 end) [US],
sum(case when 产地 = 'CN' then 1 else 0 end) [CN]
from tb
/*
日期 All US CN
---------- ----------- ----------- -----------
2012-01-01 4 1 3
2012-01-02 2 2 0
2012-01-03 2 1 1
2012-01-04 1 1 0
合计 9 5 4(所影响的行数为 5 行)
*/drop table tb