不知道如何在一行中表达这个问题,对标题表示歉意......
我的数据库中有 3 个表,例如:
- 商店
- 项目
- 商店库存
Shop 和 Item 具有多对多关系,因此 ShopStock 表将它们链接起来。
ShopStock 中的字段是:
- 身份证
- 商店ID
- 商品ID
- 当前库存
我想列出商品,显示每个商店有多少库存,但我在 SQL 方面遇到了问题。像这样的事情:
ITEM TESCO STOCK ASDA STOCK SAINSBURY STOCK
Apples 5 20 74
Pears 1000 32 250
如何构建 SQL 查询来显示这样的数据?
最佳答案
这样可以更容易地在多行中列出商品、商店、当前库存。事实上,除非您知道商店的数量,否则您将需要使用动态 sql。如果您知道潜在商店的数量,则可以使用 PIVOT
返回结果。
假设您有 2 家商店(shop1 和 shop2),类似如下:
select item_name, [Shop1], [Shop2]
from
(
select item_name, shop_name, currentstock
from item i
join shopstock ss on i.item_id = ss.item_id
join shop s on s.shop_id = ss.shop_id
) x
pivot
(
max(currentstock)
for shop_name in ([Shop1],[Shop2])
) p
这是动态sql方法,因为我怀疑你不知道可能的商店数量:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = stuff((select distinct ',' + quotename(shop_name)
from shop
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'select item_name,' + @cols + '
from
(
select item_name, shop_name, currentstock
from item i
join shopstock ss on i.item_id = ss.item_id
join shop s on s.shop_id = ss.shop_id
) x
pivot
(
max(currentstock)
for shop_name in (' + @cols + ')
) p '
execute(@query)
关于SQL Server查询麻烦,多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16946641/