wpmc gsmc shliang
电工包 公司1 2
电工包 公司4 8
电工刀 公司1 2
电工刀 公司4 8
电焊机线 公司2 100
电焊机线 公司3 100
电焊镜片 公司2 100
电焊镜片 公司4 300
电焊钳 公司2 20
电焊钳 公司3 10
电焊钳 公司4 10一条查询语句,得到这种形式
电工包 公司1 2 10
公司4 8 电工刀 公司1 2 10
公司4 8 电焊机线 公司2 100 200
公司3 100 电焊镜片 公司2 100 400
公司4 300 电焊钳 公司2 20 40
公司3 10
公司4 10

解决方案 »

  1.   

    select 
             case when not exists (select 1 from tablename where wpmc=a.wpmc and gsmc<a.gsmc) then wpmc else null end as wpmc,
    a.gsmc,
    a.shliang,
             case when not exists (select 1 from tablename where wpmc=a.wpmc and gsmc<a.gsmc) then (select sum(shliang) from tablename where wpmc=a.wpmc) else bull end as zshliang
    from tablename a
    order by a.wpmc,a.gsmc
      

  2.   

    Select
    (Case When C.gsmc Is Not Null Then A.wpmc Else '' End) As wpmc,
    A.gsmc,
    A.shliang,
    (Case When C.gsmc Is Not Null Then Rtrim(B.shliang) Else '' End) As SUMshliang
    From
    TEST A
    Inner Join
    (Select wpmc, SUM(shliang) As shliang From TEST Group By wpmc) B
    On A.wpmc = B.wpmc
    Left Join
    (Select wpmc, Min(gsmc) As gsmc From TEST Group By wpmc) C
    On A.wpmc = C.wpmc And A.gsmc = C.gsmc
      

  3.   

    Create Table TEST
    (wpmc Nvarchar(30),
     gsmc Nvarchar(30),
     shliang Int)
    Insert TEST Select N'电工包', N'公司1', 2
    Union All Select N'电工包', N'公司4', 8
    Union All Select N'电工刀', N'公司1', 2
    Union All Select N'电工刀 ', N'公司4', 8
    Union All Select N'电焊机线', N'公司2', 100
    Union All Select N'电焊机线', N'公司3', 100
    Union All Select N'电焊镜片', N'公司2', 100
    Union All Select N'电焊镜片', N'公司4', 300
    Union All Select N'电焊钳', N'公司2', 20
    Union All Select N'电焊钳', N'公司3', 10
    Union All Select N'电焊钳', N'公司4', 10
    GO
    Select
    (Case When C.gsmc Is Not Null Then A.wpmc Else '' End) As wpmc,
    A.gsmc,
    A.shliang,
    (Case When C.gsmc Is Not Null Then Rtrim(B.shliang) Else '' End) As SUMshliang
    From
    TEST A
    Inner Join
    (Select wpmc, SUM(shliang) As shliang From TEST Group By wpmc) B
    On A.wpmc = B.wpmc
    Left Join
    (Select wpmc, Min(gsmc) As gsmc From TEST Group By wpmc) C
    On A.wpmc = C.wpmc And A.gsmc = C.gsmc
    GO
    Drop Table TEST
    --Result
    /*
    wpmc gsmc shliang SUMshliang
    电工包 公司1 2 10
    公司4 8
    电工刀 公司1 2 2
    电工刀  公司4 8 8
    电焊机线 公司2 100 200
    公司3 100
    电焊镜片 公司2 100 400
    公司4 300
    电焊钳 公司2 20 40
    公司3 10
    公司4 10
    */
      

  4.   

    創建數據有些問題,導致結果有些問題,改下Create Table TEST
    (wpmc Nvarchar(30),
     gsmc Nvarchar(30),
     shliang Int)
    Insert TEST Select N'电工包', N'公司1', 2
    Union All Select N'电工包', N'公司4', 8
    Union All Select N'电工刀', N'公司1', 2
    Union All Select N'电工刀', N'公司4', 8
    Union All Select N'电焊机线', N'公司2', 100
    Union All Select N'电焊机线', N'公司3', 100
    Union All Select N'电焊镜片', N'公司2', 100
    Union All Select N'电焊镜片', N'公司4', 300
    Union All Select N'电焊钳', N'公司2', 20
    Union All Select N'电焊钳', N'公司3', 10
    Union All Select N'电焊钳', N'公司4', 10
    GO
    Select
    (Case When C.gsmc Is Not Null Then A.wpmc Else '' End) As wpmc,
    A.gsmc,
    A.shliang,
    (Case When C.gsmc Is Not Null Then Rtrim(B.shliang) Else '' End) As SUMshliang
    From
    TEST A
    Inner Join
    (Select wpmc, SUM(shliang) As shliang From TEST Group By wpmc) B
    On A.wpmc = B.wpmc
    Left Join
    (Select wpmc, Min(gsmc) As gsmc From TEST Group By wpmc) C
    On A.wpmc = C.wpmc And A.gsmc = C.gsmc
    GO
    Drop Table TEST
    --Result
    /*
    wpmc gsmc shliang SUMshliang
    电工包 公司1 2 10
    公司4 8
    电工刀 公司1 2 10
    公司4 8
    电焊机线 公司2 100 200
    公司3 100
    电焊镜片 公司2 100 400
    公司4 300
    电焊钳 公司2 20 40
    公司3 10
    公司4 10
    */
      

  5.   

    高手啊,多谢。
    我只弄出来这样的 
    select * from (select wpmc,count(gsmc) as cou,sum(shliang) as kk from abc group by wpmc) t,abc where t.wpmc=abc.wpmc
      

  6.   

    create table #(wpmc varchar(10), gsmc varchar(5),shliang int)
    insert into # select '电工包', '公司1', 2
    union all select '电工包', '公司4', 8
    union all select '电工刀', '公司1', 2
    union all select '电工刀', '公司4', 8
    union all select '电焊机线', '公司2', 100
    union all select '电焊机线', '公司3', 100
    union all select '电焊镜片', '公司2', 100
    union all select '电焊镜片', '公司4', 300
    union all select '电焊钳', '公司2', 20
    union all select '电焊钳', '公司3', 10
    union all select '电焊钳', '公司4', 10select isnull(case when tag='' then '' else b.wpmc end,'')'nwpmc',
    case when tag='' then '' else a.gsmc end'ngsmc',
    case when tag='' then '' else cast(a.shliang as varchar(5)) end 'nshliang',
    isnull(case when tag='' then '' else cast(b.shliang as varchar(5)) end,'')'shliangsum'
    from
    (select * from #)a left join
    (select * from (select wpmc,min(gsmc)gsmc,sum(shliang)shliang from # group by wpmc)a,
    (select ''[tag] union all select null)b)b
    on b.wpmc=a.wpmc and b.gsmc=a.gsmc
    order by a.wpmc,tag
    nwpmc      ngsmc nshliang shliangsum 
    ---------- ----- -------- ---------- 
    电工包        公司1   2        10
               公司4   8        
                              
    电工刀        公司1   2        10
               公司4   8        
                              
    电焊机线       公司2   100      200
               公司3   100      
                              
    电焊镜片       公司2   100      400
               公司4   300      
                              
    电焊钳        公司2   20       40
               公司3   10       
               公司4   10       
                              (所影响的行数为 16 行)