Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server 如何在SQL Server 2014中使用子摘要进行分区_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql server 如何在SQL Server 2014中使用子摘要进行分区

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

我不是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

非常感谢您的回复。第一个解决方案对我不起作用——它带来了奇怪的结果。第二个解决方案非常有效!所以,我还有一个问题-我如何添加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