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 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
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
(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
(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
*/
(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
*/
我只弄出来这样的
select * from (select wpmc,count(gsmc) as cou,sum(shliang) as kk from abc group by wpmc) t,abc where t.wpmc=abc.wpmc
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 行)