Как сравнить строки на различия в SQL - PullRequest
0 голосов
/ 18 июня 2019

У меня есть таблица с DocNum, DocVer, ClientNum, MatterNum.Некоторые документы имеют версии с разными комбинациями ClientNum / MatterNum, и мне нужно создать отчет с этой информацией.

1 - я создал таблицу с DocNum, DocVer, ClientNum, MatterNum, где версия> 1, так какВозможно, затронуты только документы с более чем одной версией.

2 - я пытаюсь выяснить, как лучше сравнить все версии 2+ с версией 1 для конкретного документа и указать, что не соответствует,(Группировка по DocNum, ClientNum, MatterNum или Join и т. Д.)

Я хотел бы, чтобы NULL обозначал любую версию 2+, которая не совпадает с ClientNum и MatterNum первой версии.

Пример данных таблицы:

docnum, version, client, matter    
351,    1,       15000,  00010    
351,    2,       15000,  00020

Желаемым выводом будет столбец, который обозначает документы и версии, которые не соответствуют версии 1.

docnum, version, client, matter, matched 

351,    1,       15000,  00010, y  

351,    2,       15000,  00020, n

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Вы можете использовать самостоятельное соединение на основе номера версии и проверить столбец вопроса на предмет изменения значения. Вы получите идею:

 declare @test table (docnum int, version int, client nvarchar(10), matter nvarchar(10));
 insert into @test
 values
 (351, 1, '15000', '00010'),
 (351, 2, '15000', '00020')

 -- assumes your version increases sequentially
 select t1.docnum, t1.matter, t2.matter, case when t1.matter <> t2.matter then 'flag' else 'ok' end [flag]
 from @test t1
 left join @test t2
 on t1.client = t2.client
 and t1.docnum = t2.docnum
 and t1.version = t2.version - 1
1 голос
/ 18 июня 2019

Вы можете присоединиться к новой таблице, содержащей только записи версии 2+, к записи исходной таблицы версии 1. Используя case, вы можете проверить, совпадают ли они, и отобразить нулевое значение, если они не совпадают.

SELECT 
    yt.DocNum
  , yt.DocVer
  , CASE WHEN yt.ClientNum <> ot.ClientNum THEN NULL ELSE yt.ClientNum END AS 'ClientNum'
  , CASE WHEN yt.NatterNum <> ot.MatterNum THEN NULL ELSE yt.MatterNum END AS 'MatterNum'
FROM YourTable yt -- table with versions 2+
JOIN OriginalTable ot 
  ON yt.DocNum = ot.DocuNum AND ot.DocVer = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...