Вот запрос:
INSERT INTO @TempTable
SELECT
UserID, Name,
Address1 =
(SELECT TOP 1 [Address] FROM
(SELECT TOP 1 [Address] FROM [UserAddress] ua
INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID
WHERE ua.UserID = u.UserID
ORDER BY uo.AddressOrder ASC) q
ORDER BY AddressOrder DESC),
Address2 =
(SELECT TOP 1 [Address] FROM
(SELECT TOP 2 [Address] FROM [UserAddress] ua
INNER JOIN UserAddressOrder uo ON ua.UserID = uo.UserID
WHERE ua.UserID = u.UserID
ORDER BY uo.AddressOrder ASC) q
ORDER BY AddressOrder DESC)
FROM
User u
В этом сценарии у пользователей есть несколько определений адресов, причем целочисленное поле указывает предпочтительный порядок. «Адрес2» (второй предпочтительный адрес) пытается взять два верхних предпочтительных адреса, упорядочить их по убыванию, а затем выбрать верхний из результата. Вы можете сказать, что просто используйте подзапрос, который выполняет SELECT для записи со значением «2» в поле «Порядок», но значения порядка не являются смежными.
Как это можно переписать, чтобы соответствовать ограничениям SQL 2000?
Очень ценю.
[ИЗМЕНИТЬ]
Когда я заменяю u.UserID
в предложении WHERE
фактическим идентификатором пользователя, SQL Server 2000 не жалуется. Кажется, что SQL 2000 не может связать внутреннюю ссылку (u.UserID) с внешней таблицей (User u).
Опять вылетает ошибка:
Msg 8624, Level 16, State 16, Line 24
Internal SQL Server error.