SQL Server 用于查看组中单元格是否匹配的SQL

yrdbyhpb  于 2022-11-21  发布在  其他
关注(0)|答案(2)|浏览(83)

我有一个表格,其中一栏有重复的值,我需要将这些值分组。然后,我想查看不同栏中相同分组内的所有储存格是否相符,或者更明确地说,它们是否不相符。

这是我目前掌握的情况。

SELECT Dashboard_Widget_Id, Position ????? AS Is_Different
FROM toolbox.Dashboard_Widget_Sizes
GROUP BY Dashboard_Widget_Id
fzsnzjdm

fzsnzjdm1#

算了,我想我明白了.

SELECT Dashboard_Widget_Id, CAST(SIGN(COUNT(t.Dashboard_Widget_Id) - 1) AS BIT) AS Is_Different
FROM (
    SELECT Dashboard_Widget_Id
    FROM toolbox.Dashboard_Widget_Sizes
    GROUP BY Dashboard_Widget_Id, Position
) t
GROUP BY Dashboard_Widget_Id
a6b3iqyw

a6b3iqyw2#

如果你想保留“细节视图”,这里有两种使用窗口函数的方法:

DECLARE @t5 TABLE (A INT, B INT, C VARCHAR(100))
INSERT INTO @t5 (A,B,C)
          SELECT 1,1,'1,2,3,4'
UNION ALL SELECT 1,1,'1,2,3,4'

UNION ALL SELECT 2,1,'1,2,3,4'--
UNION ALL SELECT 2,1,'1,2,3,4'---- Same
UNION ALL SELECT 2,1,'1,2,3,4'--

UNION ALL SELECT 3,1,'1,2,7,4'--
UNION ALL SELECT 3,1,'1,2,3,4'---- Different
UNION ALL SELECT 3,1,'1,2,3,4'--

UNION ALL SELECT 4,1,'1,2,3,4'

--"Alternate Partitions are not equal":
SELECT A,B,C,
CASE WHEN COUNT(*) OVER (PARTITION BY A) <> COUNT(*) OVER (PARTITION BY A,C) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END IsDifferent
FROM @t5 t 

--"DENSE_RANK() OVER Partition > 1":
SELECT 
A,B,C,CASE WHEN MAX(D) OVER (PARTITION BY A) > 1 THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END IsDifferent
FROM
(SELECT A,B,C,DENSE_RANK() OVER (PARTITION BY A ORDER BY C) D
FROM @t5 t) a

相关问题