TSQL不同计数2

TSQL不同计数2,tsql,sql-server-2012,Tsql,Sql Server 2012,几周前我在这里发帖问了这个问题,现在球门柱有点动了: 我发现SuppressionType有一个优先级,计数应该按优先级降序进行。出现的问题是,某些suppression具有相同的优先级,在本例中,SuppressionTypeID应按递减顺序使用,以形成不同的顺序 为了计算问题,我要计算多个文件中的不同行数,因此是fileid 下面sql的理想结果是: SuppressionTypeID FileID PersonCount 1 8786 2 2

几周前我在这里发帖问了这个问题,现在球门柱有点动了:

我发现SuppressionType有一个优先级,计数应该按优先级降序进行。出现的问题是,某些suppression具有相同的优先级,在本例中,SuppressionTypeID应按递减顺序使用,以形成不同的顺序

为了计算问题,我要计算多个文件中的不同行数,因此是fileid

下面sql的理想结果是:

SuppressionTypeID   FileID  PersonCount
1           8786    2
2           8976    1
2           8977    1
SuppressionTypeID   FileID  PersonID    Priority    FirstID
1           8786    456     1       1
1           8976    123     1       1
2           8976    456     1       2
2           8976    789     1       1
2           8977    123     1       1
2           8977    456     1       1
我正在使用的演示代码(来自上一个问题):

如果有更好的方法,只要结果正确,就不必使用这种方法

提前谢谢

我也试过这个。我试图得到一个1的等级,从那里我可以算出等级=1的地方,但这也不太管用:

;WITH CTE AS    (
            SELECT  SuppressionTypeID
            ,       FileID
            ,       PersonID
            ,       [Priority]
            ,       RANK() OVER (PARTITION BY FileID, [Priority], PersonID ORDER BY SuppressionTypeID) AS FirstID
            FROM    #t
            )
SELECT * FROM CTE
理想情况下,我的结果是:

SuppressionTypeID   FileID  PersonCount
1           8786    2
2           8976    1
2           8977    1
SuppressionTypeID   FileID  PersonID    Priority    FirstID
1           8786    456     1       1
1           8976    123     1       1
2           8976    456     1       2
2           8976    789     1       1
2           8977    123     1       1
2           8977    456     1       1

尝试将sql拆分为多个部分并构建:

根据SuppressionID、FileID,这将为每个PersonID获取一个实例。。。按优先顺序

SELECT * FROM
(SELECT *, Row_Number() OVER (partition by PersonID ORDER By SuppressionTypeID,...) AS RN FROM #T) A
WHERE RN = 1

然后将其用作计数查询的源。

您有两组理想结果。是哪一个?我在看b计划Hogan。但总而言之,如果一个人被更高优先级的抑制所捕获,我不希望他们再次计数。因此,无论哪一个问题可以解决,我都可以与之合作。感谢仍然无法工作的Amir,因为文件ID 8977的PersonID 123已被删除。我需要对每个文件进行不同的计数,因为我最初声明的是固定的,我的虚拟数据也有错误,您的查询工作正常