如何在 SQL Server 2014 中使用子摘要进行分区
How to partition with a sub summary in SQL Server 2014
我不是 SQL 方面的专家,我真的很难解决这个问题(在 SQL Server Management Studio 中构建):
我的数据:
id_module id_cr
---------------------
001 12345
001 67891
001 12345
001 25896
002 23456
003 78912
003 23456
004 34567
004 34567
004 34567
004 89123
004 34567
004 34567
004 89123
004 89123
004 66663
我希望它看起来像什么 - 显示每个模块的前 2 条内容(按条目数计算):
Grouped by id_module Grouped by id_cr Count (sum) of id_cr
001 12345 2
001 67891 1
002 23456 1
003 78912 1
003 23456 1
004 34567 5
004 89123 3
到目前为止我有:
SELECT
id_module, id_cr,
RANK() OVER (PARTITION BY id_module ORDER BY id_module) AS 'Ranking',
COUNT(*) OVER (PARTITION BY id_cr) AS webtrackerCount
FROM
webtracker_user
WHERE
id_module > 0 AND id_cr > 0
ORDER BY
id_module, webtrackerCount DESC
这为我提供了所有模块,其中每个 id_cr 都列在各自的行中而不是分组。
示例:
id_module id_cr ranking webtrackerCount
-----------------------------------------------------
001 64639 1 32
001 64639 1 32
(this is repeated 30 more times)
001 38099 1 12
(this is repeated 11 more times)
002 84562 1 50
(this is repeated 49 more times)
etc.
那么,我还有多远?有没有办法按照我的需要做报告?非常感谢任何帮助 :) 谢谢!
这里我根据您给出的查询做了一些修改
查询 1
SELECT ID_MODULE, ID_CR
FROM (SELECT DISTINCT id_module,id_cr,
Rank() OVER (Partition by id_module Order by id_module, id_cr ) AS 'Ranking',
FROM webtracker_user ) a
WHERE a.Ranking <= 2
Order by ID_MODULE
我希望这对你有用,让我们知道进展如何
或者你也可以让CTE对记录进行分组,然后做一些排名,然后过滤出喜欢的排名如下
查询 2
WITH CTE AS(
SELECT *, Rank() OVER (Partition by id_module Order by id_module, id_cr ) AS 'Ranking'
FROM (SELECT DISTINCT id_module,id_cr
FROM webtracker_user) a
)
SELECT ID_MODULE, ID_CR
FROM CTE a
WHERE a.Ranking <= 2
Order by ID_MODULE
我不是 SQL 方面的专家,我真的很难解决这个问题(在 SQL Server Management Studio 中构建):
我的数据:
id_module id_cr
---------------------
001 12345
001 67891
001 12345
001 25896
002 23456
003 78912
003 23456
004 34567
004 34567
004 34567
004 89123
004 34567
004 34567
004 89123
004 89123
004 66663
我希望它看起来像什么 - 显示每个模块的前 2 条内容(按条目数计算):
Grouped by id_module Grouped by id_cr Count (sum) of id_cr
001 12345 2
001 67891 1
002 23456 1
003 78912 1
003 23456 1
004 34567 5
004 89123 3
到目前为止我有:
SELECT
id_module, id_cr,
RANK() OVER (PARTITION BY id_module ORDER BY id_module) AS 'Ranking',
COUNT(*) OVER (PARTITION BY id_cr) AS webtrackerCount
FROM
webtracker_user
WHERE
id_module > 0 AND id_cr > 0
ORDER BY
id_module, webtrackerCount DESC
这为我提供了所有模块,其中每个 id_cr 都列在各自的行中而不是分组。
示例:
id_module id_cr ranking webtrackerCount
-----------------------------------------------------
001 64639 1 32
001 64639 1 32
(this is repeated 30 more times)
001 38099 1 12
(this is repeated 11 more times)
002 84562 1 50
(this is repeated 49 more times)
etc.
那么,我还有多远?有没有办法按照我的需要做报告?非常感谢任何帮助 :) 谢谢!
这里我根据您给出的查询做了一些修改
查询 1
SELECT ID_MODULE, ID_CR
FROM (SELECT DISTINCT id_module,id_cr,
Rank() OVER (Partition by id_module Order by id_module, id_cr ) AS 'Ranking',
FROM webtracker_user ) a
WHERE a.Ranking <= 2
Order by ID_MODULE
我希望这对你有用,让我们知道进展如何
或者你也可以让CTE对记录进行分组,然后做一些排名,然后过滤出喜欢的排名如下
查询 2
WITH CTE AS(
SELECT *, Rank() OVER (Partition by id_module Order by id_module, id_cr ) AS 'Ranking'
FROM (SELECT DISTINCT id_module,id_cr
FROM webtracker_user) a
)
SELECT ID_MODULE, ID_CR
FROM CTE a
WHERE a.Ranking <= 2
Order by ID_MODULE