查询语句的问题
wpmcgsmcshliang
电工包公司12
电工包公司48
电工刀公司12
电工刀公司48
电焊机线公司2100
电焊机线公司3100
电焊镜片公司2100
电焊镜片公司4300
电焊钳公司220
电焊钳公司310
电焊钳公司410
一条查询语句,得到这种形式
电工包公司1210
公司48
电工刀公司1210
公司48
电焊机线公司2100200
公司3100
电焊镜片公司2100400
公司4300
电焊钳公司22040
公司310
公司410
[解决办法]
創建數據有些問題,導致結果有些問題,改下
Create Table TEST
(wpmcNvarchar(30),
gsmcNvarchar(30),
shliangInt)
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
/*
wpmcgsmcshliangSUMshliang
电工包公司1210
公司48
电工刀公司1210
公司48
电焊机线公司2100200
公司3100
电焊镜片公司2100400
公司4300
电焊钳公司22040
公司310
公司410
*/
[解决办法]
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
电工刀 公司1 2 10
公司4 8
电焊机线 公司2 100 200
公司3 100
电焊镜片 公司2 100 400
公司4 300
电焊钳 公司2 20 40
公司3 10
公司4 10
(所影响的行数为 16 行)