Я пытаюсь получить UNION ALL, работающий с CTE, который я использую для подкачки. Мне нужно, чтобы все записи соответствовали набору критериев из двух таблиц, а затем отображали результаты. КТР Первая таблица выглядит следующим образом:UNION ALL in CTE
;WITH Results_CTE AS (SELECT t1.SomeIntKey1, ROW_NUMBER() OVER (ORDER BY SomeIntKey1) AS RowNum
FROM Table1 t1
LEFT JOIN CalculatedData d ON d.Key = t1.SomeIntKey1
WHERE Postcode LIKE 'CHX 1XX%'
) SELECT * FROM Results_CTE a INNER JOIN CalclatedData d ON a.SomeIntKey1 = d.Key WHERE RowNum >= 0 AND RowNum <= 10 OPTION(RECOMPILE)
второй таблицы в пейджинг SQL (который работает отлично) является:
;WITH Results_CTE AS (SELECT t2.SomeIntKey2, ROW_NUMBER() OVER (ORDER BY SomeIntKey2) AS RowNum
FROM Table2 t2
LEFT JOIN CalculatedData d ON d.Key = t1.SomeIntKey2
WHERE Postcode LIKE 'CHX 1XX%'
) SELECT * FROM Results_CTE a INNER JOIN CalclatedData d ON a.SomeIntKey2 = d.Key WHERE RowNum >= 0 AND RowNum <= 10 OPTION(RECOMPILE)
Для комбинированных выгружаемого данных, я пытался что-то вроде:
;WITH Results_CTE AS (SELECT t2.SomeIntKey2, ROW_NUMBER() OVER (ORDER BY SomeIntKey2) AS RowNum
FROM Table2 t2
LEFT JOIN CalculatedData d ON d.Key = t1.SomeIntKey2
WHERE Postcode LIKE 'CHX 1XX%'
UNION ALL
SELECT t1.SomeIntKey1
FROM Table1 t1
LEFT JOIN CalculatedData d ON d.Key = t1.SomeIntKey1
WHERE Postcode LIKE 'CHX 1XX%'
) SELECT * FROM Results_CTE a INNER JOIN CalclatedData d ON a.SomeIntKey2 = d.Key WHERE RowNum >= 0 AND RowNum <= 10 OPTION(RECOMPILE)
Однако это приводит к ошибке: All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.
Я знаю, что UNION ALLs могут сбивать с толку в лучшие времена, особенно с объединениями, но я по существу получаю список ключей INT из двух таблиц, а затем присоединяю их к третьему, который содержит нужные мне данные (ключи из обеих таблиц будет присутствовать в объединенной колонке таблицы Data
.
Когда вы 'ВЫБРАТЬ t1.SomeIntKey1 FROM Table1 t1' что вы ожидаете номер строки быть? Вы не указали это. Вы имели в виду союз, прежде чем вычислять номер строки? –
Это имеет смысл и, кажется, работает без 'ROW_NUMBER'. Где я должен помещать 'ROW_NUMBER', хотя для включения пейджинга? – Echilon