这样的数据表我想统计 A仓库 B仓库的 产品数量显示格式如下产品名称 A仓库数量 B仓库数量
羽毛球 10 4
乒乓球 5 7
篮球 5 0
足球 8 0
篮球架 0 5
球衣 0 5
球鞋 0 10
... .. ..
相同的物品 显示一次 分别显示在A 和 B仓库中
不相同的 依次显示
这样的SQL查询 如何实现?
羽毛球 10 4
乒乓球 5 7
篮球 5 0
足球 8 0
篮球架 0 5
球衣 0 5
球鞋 0 10
... .. ..
相同的物品 显示一次 分别显示在A 和 B仓库中
不相同的 依次显示
这样的SQL查询 如何实现?
sum(case when 类型='A仓库' then 产品数量 else 0 end) as [A仓库数量],
sum(case when 类型='B仓库' then 产品数量 else 0 end) as [B仓库数量]
from tb
group by 产品名称
max(case 类型 when A仓库 then 产品数量 else null end) as A仓库数量,
max(case 类型 when B仓库 then 产品数量 else null end) as B仓库数量
from tb
group by 产品名称
(select 仓库类型 from a group by 仓库类型)as b on a.仓库类型 = b.仓库类型pivot
(sum(产品数量)
FOR 仓库类型 IN (select 仓库类型 from a group by 仓库类型 ))
AS
(
SELECT 1,'A仓库','羽毛球',10
UNION ALL
SELECT 2,'A仓库','乒乓球',5
UNION ALL
SELECT 3,'A仓库','篮球',5
UNION ALL
SELECT 4,'A仓库','足球',8
UNION ALL
SELECT 5,'B仓库','篮球',7
UNION ALL
SELECT 6,'B仓库','乒乓球',5
UNION ALL
SELECT 7,'B仓库','足球',10
UNION ALL
SELECT 8,'B仓库','羽毛球',9
UNION ALL
SELECT 9,'B仓库','足球',6
UNION ALL
SELECT 10,'C仓库','羽毛球',8
UNION ALL
SELECT 11,'C仓库','篮球',2
UNION ALL
SELECT 12,'C仓库','羽毛球',10
UNION ALL
SELECT 13,'C仓库','乒乓球',10
)
SELECT [产品名称],[A仓库数量]=MAX(CASE WHEN [类型]='A仓库'THEN [产品数量] ELSE 0 END ),[B仓库数量]=MAX(CASE WHEN [类型]='B仓库'THEN [产品数量] ELSE 0 END )
FROM test
GROUP BY 产品名称
/*
产品名称 A仓库数量 B仓库数量
------ ----------- -----------
篮球 5 7
乒乓球 5 5
羽毛球 10 9
足球 8 10
(4 行受影响)
*/
if OBJECT_ID('TEST2') IS NOT NULL
DROP TABLE TEST2
GO
CREATE table test2(id int identity(1,1),house_name varchar(10),product_type varchar(10),quantity int)
insert into test2
select 'A仓库','羽毛球',10 union all
select 'A仓库','乒乓球',6 union all
select 'B仓库','乒乓球',15 union all
select 'B仓库','蓝球',10
go
select * from test2
select product_type,sum(case house_name when 'A仓库' then quantity else 0 end) as 'A仓库',
SUM(case house_name when 'B仓库' then quantity else 0 end) as 'B仓库'
from test2
group by product_type
/*
----------- ---------- ------------ -----------
1 A仓库 羽毛球 10
2 A仓库 乒乓球 6
3 B仓库 乒乓球 15
4 B仓库 蓝球 10(4 row(s) affected)product_type A仓库 B仓库
------------ ----------- -----------
蓝球 0 10
乒乓球 6 15
羽毛球 10 0(3 row(s) affected)
*/
比如 仓库 和 产品名称 都在不同的表里面 这个表里面显示的只是ID
这样我写了一个 一直提示错误SELECT ([仓库表].[FName]) AS [库房名称], ([物料表].[FName]) AS [物料名称], sum(Case When [仓库表].[FName] = '其他库' Then [存货表].[FBal] Else 0 End) AS [存货数量]
FROM [t_Stock] AS [仓库表] INNER JOIN ([ICInventory] AS [存货表] INNER JOIN [t_ICItem] AS [物料表] ON [存货表].[FItemID]=[物料表].[FItemID]) ON [仓库表].[FItemID]=[存货表].[FStockID] GROUP BY [存货表].[FItemID]