【发布时间】:2015-01-08 17:53:46
【问题描述】:
我有一张桌子 ProdByCat
CatID ProductID
---------------------------
Food Beans
Food Corn
Food Peas
Drink Juice
Drink Wine
还有一张桌子购买
Region ProductID Cost
-----------------------------
North Beans 5
South Beans 5
West Beans 5
North Corn 5
North Peas 5
West Wine 10
West Juice 10
我想要的是有一个返回的表
Region CatID TotalCost
-----------------------------
North Food 15
South Food 5
West Food 5
West Drink 20
我确信我把它复杂化了。这是我旅行的方向:
select P.Region, Y.CatID, SUM(P.Cost) As 'TotalCost'
from Purchases As P,
( select distinct(A.CatID),
Includes=( stuff (
select ''''+ ProductID + ''','
from ProdByCat B
where B.CatID = A.CatID
order by ProductID
for xml path ('')
),1,1,'')
from ProdByCat A
) Y
where ProductID in (Y.Includes)
group by P.Region, Y.CatID
这太令人兴奋了。从语法上讲,它可以工作,但返回一个空集。
我的想法是,如果我使用 xml 路径函数,我可以创建一个包含列表,如果 ProductID 存在于其中,我可以创建一个总和。
【问题讨论】:
-
为什么
Drink的区域为North? -
Y.Includes LIKE'%' + CAST(ProductID as NVARCHAR(32)) + '%'
标签: sql sql-server tsql sum