查询语句的问题

liangjianshi 2007-06-08 02:55:12
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

...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
w75251455 2007-06-08
  • 打赏
  • 举报
回复
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 行)
liangjianshi 2007-06-08
  • 打赏
  • 举报
回复
高手啊,多谢。
我只弄出来这样的
select * from (select wpmc,count(gsmc) as cou,sum(shliang) as kk from abc group by wpmc) t,abc where t.wpmc=abc.wpmc
paoluo 2007-06-08
  • 打赏
  • 举报
回复
創建數據有些問題,導致結果有些問題,改下

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
*/
paoluo 2007-06-08
  • 打赏
  • 举报
回复
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
*/
paoluo 2007-06-08
  • 打赏
  • 举报
回复
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
Yang_ 2007-06-08
  • 打赏
  • 举报
回复
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

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧