TSQL不同计数2
几周前我在这里发帖问了这个问题,现在球门柱有点动了: 我发现SuppressionType有一个优先级,计数应该按优先级降序进行。出现的问题是,某些suppression具有相同的优先级,在本例中,SuppressionTypeID应按递减顺序使用,以形成不同的顺序 为了计算问题,我要计算多个文件中的不同行数,因此是fileid 下面sql的理想结果是:TSQL不同计数2,tsql,sql-server-2012,Tsql,Sql Server 2012,几周前我在这里发帖问了这个问题,现在球门柱有点动了: 我发现SuppressionType有一个优先级,计数应该按优先级降序进行。出现的问题是,某些suppression具有相同的优先级,在本例中,SuppressionTypeID应按递减顺序使用,以形成不同的顺序 为了计算问题,我要计算多个文件中的不同行数,因此是fileid 下面sql的理想结果是: SuppressionTypeID FileID PersonCount 1 8786 2 2
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已被删除。我需要对每个文件进行不同的计数,因为我最初声明的是固定的,我的虚拟数据也有错误,您的查询工作正常