Верхний запрос выглядит в таблице, в которой будет только одна запись для каждого оператора, поэтому, если у клиента есть 7 операторов, количество строк должно быть 7, и запрос будет перечислять их например, 1,2,3,4,5,6,7Использование выделенного внутри пути xml без включения в select
Нижний запрос выглядит в таблице, которая будет иметь 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. В основном, это в большинстве случаев дублирует номера операторов для нижнего запроса, и я хотел бы, чтобы он просто делал отчетливый сквозной результат целиком, однако я попытался поместить в него отчет, и он жалуется, что порядок по элементам должен содержаться в выборе если он содержится в отдельном, это разрушает мой запрос.
Конечная цель этих двух запросов является сравнение верхнего набора результатов на дно и вернуть только те, которые Dont матч (как это будет означать, я пропускаю заявление в столешнице запросов)
--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]
Почему вы не выполняете соединение первым и не делаете группу там, а затем выполняете конкатенацию XML PATH по результатам? Или просто используйте EXCEPT для поиска отсутствующих команд вместо сравнения конкатенаций на основе строк? –
Если это для сравнения строк, то есть лучшие способы, чем групповая конкатенация. Во всяком случае, вы можете использовать CTE, где вы выбираете разные значения 'консолидированный_stmt_num' вместо' dbo.SC'. – Lamak
@AaronBertrand Извините, я не уверен, что вы имеете в виду, можете ли вы опубликовать некоторый SQL, чтобы показать мне. Спасибо за ваш ответ. – JsonStatham