gpt4 book ai didi

sql-server - SQL Server : display differences in columns between 2 rows

转载 作者:行者123 更新时间:2023-12-01 06:26:49 26 4
gpt4 key购买 nike

我有一个非常大的表(200 多列),其中有 1000 行。我需要显示两行之间的列差异。我可以将我需要的 2 行加载到临时表中,但我不确定如何从那里继续。

例如(我将在这里只使用 5 行并且只使用通用名称)

ID        | GName       | SName    | Add1         | Add2
360111 | Billy | Bob | 1 Happy St | Sydney
360111 | Billy | Bob | 6 Sunny St | Melbourne

我想显示的是
Add1       | Add2
1 Happy St | Sydney
6 Sunny St | Melbourne

因为这些是两行之间的唯一区别。其他时候不会有区别,或者很多

干杯

最佳答案

您需要创建一些动态 sql 来循环遍历临时表的元数据,并检查是否需要返回给定的列。最后,动态地创建一个将返回键的 SELECT 语句(您可以针对这种情况对其进行硬编码,或者如果您将此逻辑置于更通用的存储过程中,则可以将其设为参数)。

又快又脏,它看起来像这样:

-- setting up test-data
IF OBJECT_ID('tempdb..#test') IS NOT NULL DROP TABLE #test

SELECT ID = 360111,
GName = 'Billy',
SName = 'Bob',
Add1 = '1 Happy St',
Add2 = 'Sydney'
INTO #test

UNION ALL

SELECT ID = 360111,
GName = 'Billy',
SName = 'Bob',
Add1 = '6 Sunny St',
Add2 = 'Melbourne'


GO
-- find different columns and list them
DECLARE @c_column_name sysname
DECLARE @sql nvarchar(max)

IF OBJECT_ID('tempdb..#diff_columns') IS NOT NULL DROP TABLE #diff_columns

SELECT column_name = name
INTO #diff_columns
FROM sys.columns
WHERE 1 = 2

DECLARE column_loop CURSOR LOCAL FAST_FORWARD
FOR SELECT diff_columns = name
FROM tempdb.sys.columns
WHERE object_id = object_id('tempdb..#test')
AND name <> 'ID' -- no need to test the key-field
OPEN column_loop
FETCH NEXT FROM column_loop INTO @c_column_name
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @sql = 'INSERT #diff_columns (column_name)
SELECT ''' + @c_column_name + '''
WHERE EXISTS ( SELECT * FROM #test HAVING COUNT (DISTINCT ' + @c_column_name + ') > 1)'

EXEC (@sql)

FETCH NEXT FROM column_loop INTO @c_column_name
END
CLOSE column_loop
DEALLOCATE column_loop

SELECT @sql = 'SELECT ID'
SELECT @sql = @sql + ', ' + column_name
FROM #diff_columns
SELECT @sql = @sql + ' FROM #test'

EXEC (@sql)

关于sql-server - SQL Server : display differences in columns between 2 rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com