代码
CREATE TABLE #Temp (ValA varchar(10) NULL, FK_ID int)
INSERT INTO #Temp
SELECT 'A',1
UNION ALL
SELECT 'A',1
UNION ALL
SELECT 'A',1
UNION ALL
SELECT 'A',2
UNION ALL
SELECT 'B',1
UNION ALL
SELECT 'B',2
UNION ALL
SELECT 'C',1
UNION ALL
SELECT 'C',1
UNION ALL
SELECT 'C',1
SELECT
ValA
, FK_ID
, CASE WHEN COUNT(*) OVER (PARTITION BY ValA, FK_ID) > 1 THEN 1
ELSE 0
END IsMultiple
FROM #Temp
DROP TABLE #Temp
电流输出
ValA FK_ID IsMultiple
A 1 1
A 1 1
A 1 1
A 2 0
B 1 0
B 2 0
C 1 1
C 1 1
C 1 1
期望的输出
ValA FK_ID IsMultiple
A 1 1
A 1 1
A 1 1
A 2 **1**
B 1 0
B 2 0
C 1 1
C 1 1
C 1 1
目标 我想找到由 ValA 和 FK_ID 分区的倍数,但对于那些 ValA 重复且至少有 2 个 FK_ID 重复(而至少有一个不重复)的倍数,我希望将它们标记为 1(IsMultiple)。
即ValA - A 有 4 条记录,其中 3 条记录具有相同的 FK_ID 但有一条不同的 FK_ID,整个集合应标记为 IsMultiple = 1
谢谢
最佳答案
如果FK_ID
中没有NULL
值
SELECT
ValA
, FK_ID
, CASE WHEN COUNT(*) OVER (PARTITION BY ValA) >
dense_rank() OVER (PARTITION BY ValA ORDER BY FK_ID ASC) + dense_rank() OVER (PARTITION BY ValA ORDER BY FK_ID DESC) -1 -- Get Distinct FK_ID Count
THEN 1
ELSE 0
END IsMultiple
FROM Temp
关于sql - 数据库 |找到倍数(扭曲?!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32484954/