比较两个行(两个不同的ID)和检查,如果他们列数值完全相同。 所有行&列在同一个表

0

的问题

我有一个表名"名册"在这方面表我有22个列。

我想要查询和进行比较的任何2行的特定表的目的检查,如果每个列的值,2行是完全相同的。 ID列总是具有不同的数值在每一行所以我将不包括ID列的比较。 我只是用它来指什么行将用于比较。

如果所列的数值是相同的: 要么只是显示没有(我喜欢这个人),或只是返回的2行,因为它是。

如果有一些列价值观不一样的: 无论是显示那些列名或显示的列名和其值(我喜欢这一个)。

例如:

名册表:

ID 名称 时间
1 N1 0900
2 N1 0801

输出:

ID 时间
1 0900
2 0801

显示"时间"

注:实际上,我没事,一切结果或方式的输出,只要作为我可以知道在任何方式2行不相同。

什么是可能的方式做到这一点,在SQL服务器?

我使用Microsoft SQL服务器的管理工作室18,Microsoft SQL Server2019-15.0.2080.9

sql sql-server tsql
2021-11-24 03:55:43
1

最好的答案

3

请尝试的以下解决方案的基础上的思想约翰*卡佩莱蒂。 一切归功于他。

SQL

-- DDL and sample data population, start
DECLARE @roster TABLE (ID INT PRIMARY KEY, NAME VARCHAR(10), TIME CHAR(4));
INSERT IGNORE INTO @roster (ID, NAME, TIME) VALUES
(1,'N1','0900'),
(2,'N1','0801')
-- DDL and sample data population, end

DECLARE @source INT = 1
    , @target INT = 2;

SELECT id AS source_id, @target AS target_id
      ,[key] AS [column]
      ,source_Value = MAX( CASE WHEN Src=1 THEN Value END)
      ,target_Value = MAX( CASE WHEN Src=2 THEN Value END)
FROM (
        SELECT Src=1
              ,id 
              ,B.*
         FROM @roster AS A
         CROSS APPLY ( SELECT [Key]
                             ,Value
                       FROM OpenJson( (SELECT A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES)) 
                     ) AS B
        WHERE id=@source
        UNION ALL
        SELECT Src=2
              ,id = @source
              ,B.*
         FROM @roster AS A
         CROSS APPLY ( SELECT [Key]
                             ,Value
                       FROM OpenJson( (SELECT A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES)) 
                     ) AS B
         WHERE id=@target
      ) AS A
GROUP BY id, [key]
HAVING MAX(CASE WHEN Src=1 THEN Value END)
     <> MAX(CASE WHEN Src=2 THEN Value END)
    AND [key] <> 'ID'   -- exclude this PK column
ORDER BY id, [key];

输出

+-----------+-----------+--------+--------------+--------------+
| source_id | target_id | column | source_Value | target_Value |
+-----------+-----------+--------+--------------+--------------+
|         1 |         2 | TIME   |         0900 |         0801 |
+-----------+-----------+--------+--------------+--------------+
2021-11-24 06:12:31

我是想来看看这个并且很困惑通过的[关键]的一部分。 我可以知道什么是这个"关键"和应该如何这样可以定义或使用?
Lars

{的关键]的一部分象. (1)关键,(2)值,以及(3)的类型,他们三个都会自动生成的通过手机中。 看看这里: bertwagner.com/posts/the-ultimate-sql-server-json-cheat-sheet
Yitzhak Khabinsky

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................