Sql 无分组和最大重复值数的总和
我有一张这样的桌子Sql 无分组和最大重复值数的总和,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张这样的桌子 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
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
基本上,STDHR不应该卷起,只显示最大重复数的数字。但它应该会把美元领域卷起
谢谢,有点复杂,可能可以简化,但您可以通过获取
stdhr
的COUNT
,然后通过densite\u-RANK()
对其进行排序,然后从MAX()
stdhr的最高计数处拉出stdhr
(例如:densite\u-RANK()=1
)
有点复杂,可能可以简化,但您可以通过获取stdhr的计数
,然后通过densite\u RANK()
对它们进行排序,然后从其最高计数的位置拉出MAX()
stdhr(例如:densite\u RANK()=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
我做了两次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
对于数量为stdhr
的领带,您怎么做?获取最大(stdhr)数量为stdhr
的领带,您怎么做?获取最大(stdhr)数量不需要使用OVER
子句的DISTINCT
。这相当于一个简单的分组。此外,OP需要最频繁的stdhr
MAX
就像一个打破僵局的人。@TomH True,但是标题中指定的OP他们不想使用GROUP BY
@Siyual,如果你看到Dept 123和Sub 991在这种情况下,stdhrs应该是2.679而不是2.699,我很抱歉标题…可以根据要求使用GROUP byUpdated查询。没有必要使用DISTINCT
和OVER
子句。这相当于一个简单的分组。此外,OP需要最频繁的stdhr
MAX
只是一个平局因素。@TomH True,但标题中指定的OP他们不想使用GROUP BY
@Siyual,如果您看到的是Dept 123和Sub 991,在这种情况下,stdhrs应该是2.679,而不是2.699。很抱歉,标题…可以根据要求使用GROUP ByUpdate查询。