假设我有如下表结构以及内容供应商编号 品种编号 称重日期 吨数 车辆编号
001 01 2008-1-1 100 K3234
002 01 2008-1-1 98 K3134
003 01 2008-1-1 99 K2312
004 03 2008-1-1 99 K2342
003 02 2008-1-2 101 K2221
002 03 2008-1-2 102 K2341
002 01 2008-2-3 93 K2341
002 01 2008-2-3 99 K2345
001 02 2008-2-3 97 K3331
004 02 2008-3-4 100 K2341
002 02 2008-3-4 200 K3345
003 03 2008-4-5 201 K6754
001 01 2008-4-5 186 K4567
002 03 2008-4-5 187 K3754
想得到如下结构的报表供应商编号 品种编号 日合计吨数 日合计车次 月合计吨数 月合计车次
SQL语句如何写?
001 01 2008-1-1 100 K3234
002 01 2008-1-1 98 K3134
003 01 2008-1-1 99 K2312
004 03 2008-1-1 99 K2342
003 02 2008-1-2 101 K2221
002 03 2008-1-2 102 K2341
002 01 2008-2-3 93 K2341
002 01 2008-2-3 99 K2345
001 02 2008-2-3 97 K3331
004 02 2008-3-4 100 K2341
002 02 2008-3-4 200 K3345
003 03 2008-4-5 201 K6754
001 01 2008-4-5 186 K4567
002 03 2008-4-5 187 K3754
想得到如下结构的报表供应商编号 品种编号 日合计吨数 日合计车次 月合计吨数 月合计车次
SQL语句如何写?
sum(吨数) as 日合计吨数,count(*) as 日合计车次,
月合计吨数=(select sum(吨数) from 表 where 供应商编号=t.供应商编号 and 品种编号=t.品种编号 and datediff(mm,称重日期,t.称重日期)=0),
月合计车次=(select count(*) from 表 where 供应商编号=t.供应商编号 and 品种编号=t.品种编号 and datediff(mm,称重日期,t.称重日期)=0)
from 表 t
select 供应商编号,品种编号,
日合计吨数 =(select sum(吨数) from tb where 供应商编号=t.供应商编号 and 称重日期=t. 称重日期),
日合计车次 =(select count(*) from tb where 供应商编号=t.供应商编号 and 称重日期=t. 称重日期),
月合计吨数 =(select sum(吨数) from tb where 供应商编号=t.供应商编号 and convert( char(7),称重日期,120)= convert( char(7),t.称重日期,120)),
月合计车次 =(select count(*) from tb where 供应商编号=t.供应商编号 and convert( char(7),称重日期,120)= convert( char(7),t.称重日期,120))
from tb t
此外,楼主要统计 日合计, 选择列中也必须有称重日期。select 供应商编号,品种编号,convert(varchar(10),称重日期,120) as 称重日期,
sum(吨数) as 日合计吨数,count(*) as 日合计车次,
月合计吨数=(select sum(吨数) from test where 供应商编号=t.供应商编号 and 品种编号=t.品种编号 and datediff(mm,称重日期,t.称重日期)=0),
月合计车次=(select count(*) from test where 供应商编号=t.供应商编号 and 品种编号=t.品种编号 and datediff(mm,称重日期,t.称重日期)=0)
from test t
group by 供应商编号,品种编号,称重日期使用楼主的原版数据,结果如下:供应商编号 品种编号 称重日期 日合计吨数 日合计车次 月合计吨数 月合计车次
001 01 2008-01-01 100 1 100 1
001 01 2008-04-05 186 1 186 1
001 02 2008-02-03 97 1 97 1
002 01 2008-01-01 98 1 98 1
002 01 2008-02-03 192 2 192 2
002 02 2008-03-04 200 1 200 1
002 03 2008-01-02 102 1 102 1
002 03 2008-04-05 187 1 187 1
003 01 2008-01-01 99 1 99 1
003 02 2008-01-02 101 1 101 1
003 03 2008-04-05 201 1 201 1
004 02 2008-03-04 100 1 100 1
004 03 2008-01-01 99 1 99 1
--我想按日期合计 和按月份 合计的时候 还要看年份,
2008-1-1 和2009-1-1 要分开合计。SELECT TABLE.供应商编号,TABLE.品种编号,AA.日合计吨数,AA.日合计车次,AB.月合计吨数,AB.月合计车次
FROM TABLE, (SELECT 供应商编号,品种编号,SUM(ISNULL(吨数,0)) AS 日合计吨数,COUNT(车辆编号) AS 日合计车次,
CAST(YEAR(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(4)) + RTRIM(CAST(DAY(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(2)))
FROM TABLE
GROUP BY 供应商编号,品种编号,CAST(YEAR(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(4)) + RTRIM(CAST(DAY(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(2)))
) AS AA,
(SELECT 供应商编号,品种编号,SUM(ISNULL(吨数,0)) AS 月合计吨数,COUNT(车辆编号) AS 月合计车次,
CAST(YEAR(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(4)) + RTRIM(CAST(MONTH(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(2)))
FROM TABLE
GROUP BY 供应商编号,品种编号,CAST(YEAR(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(4)) + RTRIM(CAST(MONTH(CONVER(DATETIME,2008-1-1,101)) AS VARCHAR(2)))
) AS AB
WHERE TABLE.供应商编号=AA.供应商编号
AND AA.供应商编号=AB.供应商编号
AND TABLE.品种编号=AA.品种编号
AND AA.品种编号=AB.品种编号
insert into tb values('001' , '01' , '2008-1-1' , 100, 'K3234')
insert into tb values('002' , '01' , '2008-1-1' , 98 , 'K3134')
insert into tb values('003' , '01' , '2008-1-1' , 99 , 'K2312')
insert into tb values('004' , '03' , '2008-1-1' , 99 , 'K2342')
insert into tb values('003' , '02' , '2008-1-2' , 101, 'K2221')
insert into tb values('002' , '03' , '2008-1-2' , 102, 'K2341')
insert into tb values('002' , '01' , '2008-2-3' , 93 , 'K2341')
insert into tb values('002' , '01' , '2008-2-3' , 99 , 'K2345')
insert into tb values('001' , '02' , '2008-2-3' , 97 , 'K3331')
insert into tb values('004' , '02' , '2008-3-4' , 100, 'K2341')
insert into tb values('002' , '02' , '2008-3-4' , 200, 'K3345')
insert into tb values('003' , '03' , '2008-4-5' , 201, 'K6754')
insert into tb values('001' , '01' , '2008-4-5' , 186, 'K4567')
insert into tb values('002' , '03' , '2008-4-5' , 187, 'K3754')
goselect 供应商编号 , 品种编号 , convert(varchar(10),称重日期,120) 称重日期 , sum(吨数) 吨数, count(distinct 车辆编号) 车次 from tb group by 供应商编号 , 品种编号 , convert(varchar(10),称重日期,120)
union all
select 供应商编号 , 品种编号 , convert(varchar(7),称重日期,120) + '月合计', sum(吨数) 吨数, count(distinct 车辆编号) 车次 from tb group by 供应商编号 , 品种编号 , convert(varchar(7),称重日期,120) + '月合计'
order by 供应商编号 , 品种编号 , 称重日期drop table tb/*
供应商编号 品种编号 称重日期 吨数 车次
---------- ---------- ------------- ----------- -----------
001 01 2008-01-01 100 1
001 01 2008-01月合计 100 1
001 01 2008-04-05 186 1
001 01 2008-04月合计 186 1
001 02 2008-02-03 97 1
001 02 2008-02月合计 97 1
002 01 2008-01-01 98 1
002 01 2008-01月合计 98 1
002 01 2008-02-03 192 2
002 01 2008-02月合计 192 2
002 02 2008-03-04 200 1
002 02 2008-03月合计 200 1
002 03 2008-01-02 102 1
002 03 2008-01月合计 102 1
002 03 2008-04-05 187 1
002 03 2008-04月合计 187 1
003 01 2008-01-01 99 1
003 01 2008-01月合计 99 1
003 02 2008-01-02 101 1
003 02 2008-01月合计 101 1
003 03 2008-04-05 201 1
003 03 2008-04月合计 201 1
004 02 2008-03-04 100 1
004 02 2008-03月合计 100 1
004 03 2008-01-01 99 1
004 03 2008-01月合计 99 1(所影响的行数为 26 行)*/