Existe uma maneira de comparar valores em duas tabelas e gerar os nomes dos diferentes campos em uma única coluna?
Tabela Abril
EU IA | Nome_do_Fornecedor | País | CEP |
---|---|---|---|
1 | UM | EUA | 92883 |
2 | B | Reino Unido | 90523 |
Marcha da Mesa
EU IA | Nome_do_Fornecedor | País | CEP |
---|---|---|---|
1 | C | EUA | 92123 |
2 | B | EUA | 88888 |
Saída desejada
EU IA | Nome_do_Fornecedor | País | CEP | Mudanças na coluna |
---|---|---|---|---|
1 | UM | EUA | 92883 | Nome_do_Fornecedor; CEP |
2 | B | Reino Unido | 90523 | País; CEP |
Eu estava pensando em definir uma variável e um loop while, mas não sei como chamá-los nesta consulta.
DECLARE @Counter INT,
@FIELD_N AS VARCHAR(MAX), @FIELD_O AS VARCHAR(MAX),
@CONC AS VARCHAR(MAX), @FINAL AS VARCHAR(MAX)
SET @Counter = 5
WHILE (@Counter <= 64)
BEGIN
SET @FIELD_N = (SELECT CONCAT(t.name,'.',C.NAME)
FROM SYS.TABLES T
LEFT JOIN SYS.all_columns C ON T.object_id = C.object_id
WHERE T.NAME = 'APRIL'
AND COLUMN_ID NOT IN (1,2,4,63,61)
AND column_id = @Counter)
SET @FIELD_o = (SELECT CONCAT(t.name,'.',C.NAME)
FROM SYS.TABLES T
LEFT JOIN SYS.all_columns C ON T.object_id = C.object_id
WHERE T.NAME = 'March'
AND COLUMN_ID NOT IN (1,2,4,63,61)
AND column_id = @Counter)
SELECT ID,
CASE
WHEN April.Supplier_Name <> March.Supplier_Name
THEN 'Supplier_Name;'
ELSE ''
END AS Column_changes
FROM
April
LEFT JOIN
March ON April.Work_Package = March.Work_Package
WHERE
(ISNUMERIC(April.Work_Package) = 1
OR April.PROGRAM = 'AH64')
AND (ISNUMERIC(Proc_Plan_Sample.Work_Package) = 1
OR Proc_Plan_Sample.PROGRAM='Abc')
)
SET @Counter = @Counter + 1
SELECT @CONC
END