Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 计算SSI中的十大类别_Sql_Sql Server_Ssis - Fatal编程技术网

Sql 计算SSI中的十大类别

Sql 计算SSI中的十大类别,sql,sql-server,ssis,Sql,Sql Server,Ssis,我正在使用SSIS包每天更新我的内容。有数千个内容具有不同的审核ID,我想为每个审核ID计算前十个类别。在我意识到我应该为每个审核ID计算它之前,我使用此查询获取要更新的内容: SELECT TOP 10 ModerationId, Category, COUNT(ContentSeqNum) AS Total FROM Content WHERE Category IS NOT NULL GROUP BY ModerationId, Category ORDER BY ModerationId

我正在使用SSIS包每天更新我的内容。有数千个内容具有不同的审核ID,我想为每个审核ID计算前十个类别。在我意识到我应该为每个审核ID计算它之前,我使用此查询获取要更新的内容:

SELECT TOP 10 ModerationId, Category, COUNT(ContentSeqNum) AS Total FROM Content
WHERE Category IS NOT NULL
GROUP BY ModerationId, Category ORDER BY ModerationId, Total DESC
这是一种错误的方法,因为此查询计算所有数据的前十个类别,对于不同的ModerationId,它们应该是不同的前十个类别

如何更改此查询以计算每个审核ID的前10个类别?

尝试以下操作:

SELECT TOP(10) ModerationId, Category, COUNT(ContentSeqNum) OVER(PARTITION BY ModerationId ORDER BY ModerationId) AS Total 
FROM Content
WHERE Category IS NOT NULL
ORDER BY Total DESC
试试这个:

SELECT TOP(10) ModerationId, Category, COUNT(ContentSeqNum) OVER(PARTITION BY ModerationId ORDER BY ModerationId) AS Total 
FROM Content
WHERE Category IS NOT NULL
ORDER BY Total DESC

使用行数函数

select * from
(
        select *, 
        row_number() over(partition by ModerationId order by ModerationId) as sno 
        from Content WHERE Category IS NOT NULL
) as t
where sno<=10

中找到更多方法使用行数函数

select * from
(
        select *, 
        row_number() over(partition by ModerationId order by ModerationId) as sno 
        from Content WHERE Category IS NOT NULL
) as t
where sno<=10

中查找更多方法使用窗口函数获取用于计算排名前十的调节ID类别的方法。请尝试此操作

SELECT moderationid, 
       category, 
       total 
FROM   (SELECT Row_number() OVER (partition BY moderationid 
                   ORDER BY Count(contentseqnum)) Rn, 
               moderationid, 
               category, 
               Count(contentseqnum)               AS Total 
        FROM   content 
        WHERE  category IS NOT NULL 
        GROUP  BY moderationid, 
                  category) A 
WHERE  rn <= 10 
使用窗口函数获取用于计算调节ID的前十个类别的值。请尝试此操作

SELECT moderationid, 
       category, 
       total 
FROM   (SELECT Row_number() OVER (partition BY moderationid 
                   ORDER BY Count(contentseqnum)) Rn, 
               moderationid, 
               category, 
               Count(contentseqnum)               AS Total 
        FROM   content 
        WHERE  category IS NOT NULL 
        GROUP  BY moderationid, 
                  category) A 
WHERE  rn <= 10 

只需按总说明排序,不确定修改了什么。这是适度。但我不确定仅仅按总数排序是否有效,因为这只会占据所有数据的前十位,对每一个中庸者来说并不特殊。按总数排序的中庸者不确定修改了什么。这是中庸者。但我不确定仅仅按总量排序是否有效,因为这只会占据所有数据的前十位,对每一位中庸者来说并不特别感谢您花时间,但这对我不起作用。它显示了同一类别的多行。感谢您花时间,但这对我不起作用。它显示同一类别的多行。仅供参考-除非您有TOP,否则不能在子查询中使用order bykeyword@NoDisplayName抱歉,不需要subquery.FYI-除非您有TOP,否则无法在子查询中使用order bykeyword@NoDisplayName对不起,不需要子查询。啊,我搞错了,我试着在另一个答案上加上这个评论。这仍然有效,很抱歉给您带来不便。啊,我犯了一个错误,我试图在另一个答案中添加评论。这仍然有效,不便之处,敬请原谅。