Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无分组和最大重复值数的总和_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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查询。