Мне нравится группировать свою таблицу по [ID] при использовании SUM, а также возвращать
[Product_Name] верхнего ROW_NUMBER
- не уверен, стоит ли мне использовать ROW_NUMBER
, GROUPING SETS
или перебирать все с помощью FETCH ... вот что я пробовал:
DECLARE @SampleTable TABLE
(
[ID] INT,
[Price] MONEY,
[Product_Name] VARCHAR(50)
)
INSERT INTO @SampleTable
VALUES (1, 100, 'Product_1'), (1, 200, 'Product_2'),
(1, 300, 'Product_3'), (2, 500, 'Product_4'),
(2, 200, 'Product_5'), (2, 300, 'Product_6');
SELECT
[ID],
[Product_Name],
[Price],
SUM([Price]) OVER (PARTITION BY [ID]) AS [Price_Total],
ROW_NUMBER() OVER (PARTITION BY [ID] ORDER BY [ID]) AS [Row_Number]
FROM
@SampleTable T1
Мои желаемые результаты - только две записи:
1 Product_1 100.00 600.00 1
2 Product_4 500.00 1000.00 1
Любая помощь или руководство высоко ценится.
UPDATE:
В конечном итоге я использую то, что Пратик Шарма предложил в своем комментарии, чтобы просто обернуть запрос другим SELECT WHERE [Row_Number] = 1
SELECT * FROM
(
SELECT
[ID]
,[Product_Name]
,[Price]
,SUM([Price]) OVER (PARTITION BY [ID]) AS [Price_Total]
,ROW_NUMBER() OVER (PARTITION BY [ID] ORDER BY [ID]) AS [Row_Number]
FROM @SampleTable
) MultipleRows
WHERE [Row_Number] = 1