假设我有如下表结构以及内容供应商编号     品种编号        称重日期     吨数   车辆编号
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语句如何写?

解决方案 »

  1.   

    select 供应商编号,品种编号,convert(varchar(10),称重日期,120),
    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
      

  2.   


    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
      

  3.   

    借用上面的,呵呵。必须加上group by。
    此外,楼主要统计 日合计, 选择列中也必须有称重日期。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
      

  4.   

    少了Group by 供应商编号,品种编号,称重日期
      

  5.   


    --我想按日期合计 和按月份 合计的时候 还要看年份,
    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.品种编号
      

  6.   

    create table tb(供应商编号 varchar(10), 品种编号 varchar(10) , 称重日期 datetime, 吨数 int, 车辆编号 varchar(10))
    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 行)*/