वाह, अन्य उत्तर जटिल लगते हैं - इसलिए मुझे आशा है कि मैंने कुछ स्पष्ट नहीं छोड़ा है।
आप OVER
का उपयोग कर सकते हैं /PARTITION BY
समुच्चय के विरुद्ध, और फिर वे GROUP BY
के बिना समूहीकरण/एकत्रीकरण करेंगे खंड। इसलिए मैंने अभी आपकी क्वेरी को इसमें संशोधित किया है:
select T2.ID AS T2ID
,T2.Name as T2Name
,T2.Orders
,T1.ID AS T1ID
,T1.Name As T1Name
,T1Sum.Price
FROM @t2 T2
INNER JOIN (
SELECT Rel.t2ID
,Rel.t1ID
-- ,MAX(Rel.t1ID)AS t1ID
-- the MAX returns an arbitrary ID, what i need is:
,ROW_NUMBER()OVER(Partition By Rel.t2ID Order By Price DESC)As PriceList
,SUM(Price)OVER(PARTITION BY Rel.t2ID) AS Price
FROM @t1 T1
INNER JOIN @relation Rel ON Rel.t1ID=T1.ID
-- GROUP BY Rel.t2ID
)AS T1Sum ON T1Sum.t2ID = T2.ID
INNER JOIN @t1 T1 ON T1Sum.t1ID=T1.ID
where t1Sum.PriceList = 1
जो अनुरोधित परिणाम सेट देता है।