クエリは次のとおりです。
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
このシナリオでは、ユーザーは複数のアドレス定義を持ち、優先順位を指定する整数フィールドがあります。"Address2" (2 番目の優先アドレス) は、上位 2 つの優先アドレスを取得し、それらを降順に並べ替えてから、結果から上位のアドレスを取得しようとします。Order フィールドに「2」を含むレコードに対して SELECT を実行するサブクエリを使用するだけで、Order 値が連続していないと言うかもしれません。
これをどのように書き直して、SQL 2000 の制限に準拠させることができますか?
非常に高く評価。
[編集]
句を実際のユーザー IDに置き換えu.UserID
てもWHERE
、SQL Server 2000 は文句を言いません。SQL 2000 は、内部参照 (u.UserID) を外部テーブル (User u) にリンクすることを処理できないようです。
繰り返しますが、スローされるエラーは次のとおりです。
Msg 8624, Level 16, State 16, Line 24
Internal SQL Server error.