顶部查询在一个表中查找每个语句只有一条记录,因此如果客户有 7 条语句,则行数应为 7,查询将列出它们,如下所示 1,2,3,4,5,6 ,7
底部查询在一个表中查找,该表将包含上述 7 个语句,但通常它们会被拆分,因此如果每个语句有 2 行,则将有 14 行,即 1、1、2、2, 3,3,4,4,5,5,6,6,7,7
现在,我想要实现的是以下内容,顶部查询很好,但是底部查询需要区分。查看底部图像上的结果编号 2,我希望它返回为 1、2、3、4、5、6、7、8、9、10。
如果有一个特定的例子,语句分别上升到 8 和 4,我想要 1、2、3、4、5、6、7、8。基本上它是在大多数情况下复制底部查询的语句编号,我希望它只是对整个结果做一个不同的occross,但是我尝试放入一个不同的,它抱怨按项目排序必须包含在选择中如果声明包含在不同的内容中,这会破坏我的查询。
这两个查询的最终目的是将顶部结果集与底部结果集进行比较,并只带回不匹配的结果集(因为这意味着我在顶部查询表中缺少一条语句)
--Shows the each consolidated statement number that exisits for that particular customer reference number within the dbo.rss table.
Select Main.cust_ref,
Left(CAST(Main.consolidatedstatements as varchar(max)),Len(CAST(Main.consolidatedstatements as varchar(max)))-1) As "consolidatedstatements"
From(Select distinct ST2.cust_ref,
(Select CAST(ST1.consolidated_stmt_num as varchar(max)) + ',' AS [text()]
From dbo.rss ST1
Where ST1.cust_ref = ST2.cust_ref
ORDER BY ST1.cust_ref
For XML PATH ('')) [consolidatedstatements]
From dbo.rss ST2) [Main]
--Shows the each consolidated statement number that exisits for that particular customer reference number within the dbo.SC table.
Select Main.cust_ref,
Left(CAST(Main.consolidatedstatements as varchar(max)),Len(CAST(Main.consolidatedstatements as varchar(max)))-1) As "consolidatedstatements"
From(Select distinct ST2.cust_ref,
(Select CAST(ST1.consolidated_stmt_num as varchar(max)) + ',' AS [text()]
From dbo.SC ST1
Where ST1.cust_ref = ST2.cust_ref
ORDER BY ST1.cust_ref
For XML PATH ('')) [consolidatedstatements]
From dbo.SC ST2) [Main]