Я пытаюсь заставить UNION ALL работать с CTE, который я использую для пейджинга. Мне нужно получить все записи, соответствующие набору критериев из двух таблиц, а затем просмотреть результаты. 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 ALL в лучшие времена может сбивать с толку, особенно с объединениями, но я, по сути, получаю список ключей INT из двух таблиц, а затем присоединяю их к третьей, которая содержит нужные мне данные (ключи из обеих таблиц будут присутствовать в объединенном столбце таблицы Data
.
SELECT t1.SomeIntKey1 FROM Table1 t1
каким, по вашему мнению, будет номер строки? Вы его не указываете. Вы имели в виду объединение перед вычислением номера строки? - person ta.speot.is   schedule 24.01.2012ROW_NUMBER
. Где я должен поставитьROW_NUMBER
, чтобы включить пейджинг? - person Echilon   schedule 24.01.2012