我有一个包含DocNum,DocVer,ClientNum,MatterNum的表。一些文档的版本具有不同的ClientNum / MatterNum组合,我需要使用该信息创建报告。
1-我用DocNum,DocVer,ClientNum,MatterNum创建了一个表,该表的版本大于1,因为仅可能影响多个版本的文档。
2-我正在尝试找出最佳方式,将特定文档的所有2+版本与1版本进行比较,并指出不匹配的地方。 (按DocNum,ClientNum,MatterNum或Join等分组)
我想用NULL表示任何与第一个版本的ClientNum和MatterNum不匹配的2+版本。
样本表数据:
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
答案 0 :(得分:1)
您可以将仅具有版本2+记录的新表加入到原始表的版本1记录中。使用case
,您可以检查它们是否匹配,如果不匹配,则显示null。
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
答案 1 :(得分:1)
您可以使用基于版本号的自连接并测试问题列中值的变化,您将了解:
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