有表table,有字段
产品名称 产品数量 类型
产品1 20 出
产品2 10 入
产品3 20 调
产品1 10 调
产品2 10 出
产品1 30 出
要求结果如下:
产品名称 出数量 入数量 调数量
产品1 50 0 10
产品2 10 10 0
产品3 0 0 20请高手指点,谢谢
产品名称 产品数量 类型
产品1 20 出
产品2 10 入
产品3 20 调
产品1 10 调
产品2 10 出
产品1 30 出
要求结果如下:
产品名称 出数量 入数量 调数量
产品1 50 0 10
产品2 10 10 0
产品3 0 0 20请高手指点,谢谢
insert t1 select '产品1',20,'出'
union all select '产品2',10,'入'
union all select '产品3',10,'调'
union all select '产品1',10,'调'
union all select '产品2',10,'出'
union all select '产品1',10,'出'
Select
产品名称,
SUM(Case 类型 When '出' Then 产品数量 Else 0 End) As 出,
SUM(Case 类型 When '入' Then 产品数量 Else 0 End) As 入,
SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调,
From t1
Group By 产品名称
Order By 产品名称--如果类型不固定,用动态語句
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+',SUM(Case 类型 When '''+类型+''' Then 产品数量 Else 0 End) As '+类型 From (Select Distinct 类型 From t1) A Order By 类型
Set @S='Select 产品名称'+@S+' From t1 Group By 产品名称 Order By 产品名称'
EXEC(@S)
Create table t1(产品名称 varchar(10),产品数量 int,类型 varchar(10))
insert t1 select '产品1',20,'出'
union all select '产品2',10,'入'
union all select '产品3',10,'调'
union all select '产品1',10,'调'
union all select '产品2',10,'出'
union all select '产品1',10,'出'
Select
产品名称,
SUM(Case 类型 When '出' Then 产品数量 Else 0 End) As 出数量,
SUM(Case 类型 When '入' Then 产品数量 Else 0 End) As 入数量,
SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
From t1
Group By 产品名称
Order By 产品名称--如果类型不固定,用动态語句
Declare @S Varchar(1000)
Set @S=''
Select @S=@S+',SUM(Case 类型 When '''+类型+''' Then 产品数量 Else 0 End) As '+类型+'数量' From (Select Distinct 类型 From t1) A Order By 类型
Set @S='Select 产品名称'+@S+' From t1 Group By 产品名称 Order By 产品名称'
EXEC(@S)
(
产品名称 varchar(10),
产品数量 int,
类型 varchar(2)
)
insert into @a
select '产品1',20,'出' union all
select '产品2',10,'入' union all
select '产品3',20,'调' union all
select '产品1',10,'调' union all
select '产品2',10,'出' union all
select '产品1',30,'出'select * from @aselect
产品名称,
sum (case when 类型='出' then 产品数量 else 0 end) as 出数量,
sum (case when 类型='入' then 产品数量 else 0 end) as 入数量,
sum (case when 类型='调' then 产品数量 else 0 end) as 调数量
from @a
group by 产品名称/*
产品名称 产品数量 类型
---------- ----------- ----
产品1 20 出
产品2 10 入
产品3 20 调
产品1 10 调
产品2 10 出
产品1 30 出产品名称 出数量 入数量 调数量
---------- ----------- ----------- -----------
产品1 50 0 10
产品2 10 10 0
产品3 0 0 20
*/
出数量=sum(case when 类型='出' then 产品数量 else 0 end),
入数量=sum(case when 类型='入' then 产品数量 else 0 end),
调数量=sum(case when 类型='调' then 产品数量 else 0 end),
group by 产品名称
其实是有三张表呢
table主(产品名称,产品ID){(名称1,prod1),(名称2,prod2),(名称3,prod3)…}
table从(产品数量,类型ID,产品ID){(10,1,prod1),(20,2,prod2)…}
table3(类型ID,类型名称){(1,出),(2,入),(3,调)…}
Select
产品名称,
SUM(Case 类型 When '出1' or '出2' or '出3' Then 产品数量 Else 0 End) As 出数量,
SUM(Case 类型 When '入' or '入1' or '入2' Then 产品数量 Else 0 End) As 入数量,
SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
From t1
Group By 产品名称
Order By 产品名称怎么办?
产品名称,
SUM(Case When 类型='出1' or 类型='出2' or 类型='出3' Then 产品数量 Else 0 End) As 出数量,
SUM(Case When 类型='入' or 类型='入1' or 类型='入2' Then 产品数量 Else 0 End) As 入数量,
SUM(Case 类型 When '调' Then 产品数量 Else 0 End) As 调数量
From t1
Group By 产品名称
Order By 产品名称