日期:2014-05-19  浏览次数:20644 次

查询语句的问题
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



------解决方案--------------------
創建數據有些問題,導致結果有些問題,改下

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
*/

------解决方案--------------------
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 ', 10

select 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

电工