不确定如何将这个问题写成一行,对标题表示歉意…
我的数据库中有3个表,例如:
Shop和Item具有许多关系,因此ShopStock表将它们链接起来。
ShopStock中的字段是:
我想列出项目,显示每个商店有多少库存,但是我在使用SQL时遇到了麻烦。像这样的东西:
ITEM TESCO STOCK ASDA STOCK SAINSBURY STOCK Apples 5 20 74 Pears 1000 32 250
如何建立SQL查询以显示这样的数据?
这样可以更容易地在多行中将其列为项目,商店,当前库存。照原样,除非您知道商店的数量,否则将需要使用动态sql。如果您知道潜在商店的数量,则可以使用PIVOT来返回结果。
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)