我有一张类似这样的表
SELECT '123' AS Dept, '999' AS Sub, 1.789 'Stdhrs', 56 'Dollars' UNION ALL
SELECT '123' AS Dept, '999' AS Sub, 1.489 'Stdhrs', 66 'Dollars' UNION ALL
SELECT '123' AS Dept, '999' AS Sub, 1.789 'Stdhrs', 11 'Dollars' UNION ALL
SELECT '123' AS Dept, '999' AS Sub, 1.789 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.679 'Stdhrs', 12 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.679 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.679 'Stdhrs', 11 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.679 'Stdhrs', 12 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.699 'Stdhrs', 12 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.111 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.111 'Stdhrs', 13 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.112 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.112 'Stdhrs', 8 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.112 'Stdhrs', 14 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.112 'Stdhrs', 16 'Dollars' UNION ALL
SELECT '128' AS Dept, '111' AS Sub, 4.112 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '132' AS Dept, '777' AS Sub, 5.555 'Stdhrs', 11 'Dollars' UNION ALL
SELECT '132' AS Dept, '777' AS Sub, 1.222 'Stdhrs', 10 'Dollars'
我希望看到结果
SELECT '123' AS Dept, '999' AS Sub, 1.789 'Stdhrs', 143 'Dollars' UNION ALL
SELECT '123' AS Dept, '991' AS Sub, 2.679 'Stdhrs', 57 'Dollars' UNION ALL
SELECT '124' AS Dept, '991' AS Sub, 1.112 'Stdhrs', 71 'Dollars' UNION ALL
SELECT '128' AS Dept, '111' AS Sub, 4.112 'Stdhrs', 10 'Dollars' UNION ALL
SELECT '132' AS Dept, '777' AS Sub, 5.555 'Stdhrs', 21 'Dollars' UNION ALL
基本上Stdhrs不应该卷起来,只显示具有最大重复数的数字。但它应该汇总美元领域。
谢谢,
答案 0 :(得分:1)
有点复杂,可能会简化,但您可以通过获取COUNT
的{{1}},然后通过Stdhrs
对其进行排名,然后拉出{{}来实现此目的。 1}}来自它的Stdhrs,它具有最高DENSE_RANK()
(例如:MAX()
)。
COUNT
答案 1 :(得分:1)
拿了两个CTE,但这是我头脑中的第一件事。
;WITH CTE_CountsAndTotals AS
(
SELECT
Dept,
Sub,
Stdhrs,
COUNT(*) OVER (PARTITION BY Dept, Sub, Stdhrs) AS cnt,
SUM(Dollars) OVER (PARTITION BY Dept, Sub) AS Dollars
FROM
dbo.Test
),
CTE_MostFrequentStdhrs AS
(
SELECT
Dept,
Sub,
Stdhrs,
Dollars,
ROW_NUMBER() OVER (PARTITION BY Dept, Sub ORDER BY cnt DESC, Stdhrs DESC) AS row_num
FROM
CTE_CountsAndTotals
)
SELECT
Dept,
Sub,
Stdhrs,
Dollars
FROM
CTE_MostFrequentStdhrs
WHERE
row_num = 1