Sql server 如何在SQL Server 2014中使用子摘要进行分区
我不是SQL方面的专家,我真的在SQL Server Management Studio中为这个查询构建而挣扎: 我的数据:Sql server 如何在SQL Server 2014中使用子摘要进行分区,sql-server,sql-server-2014,Sql Server,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
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
非常感谢您的回复。第一个解决方案对我不起作用——它带来了奇怪的结果。第二个解决方案非常有效!所以,我还有一个问题-我如何添加id_cr总计数的行来显示-现在我可以看到id_模块和id_cr,但我也想看看这些文章被点击了多少次。。。有可能吗?我想出来了。。。使用CTE作为SELECT*,按id_模块顺序按id_模块在分区上排名,id_cr作为从选择不同的id_模块中的“排名”,id_cr,countid_cr作为从wt_用户组按id_模块中的totalcount,id_cr a选择id_模块,id_cr,从CTE a中的totalcount,其中a。按id_模块排名0,id_cr>0,totalcount DESC