我不知道如何以一般的方式解釋了這一點,所以讓我來舉個例子段發現某些行。的SQL Server 2008 R2:整蠱查詢 - 行
SELECT ParentId, Id, Number
FROM SomeTable
ORDER BY ParentId, Id
給
ParentId Id Number
2997 1145445 400
2997 1145449 400
2997 1145577 400
2997 1146518 405
2999 1145470 400
2999 1145502 400
2999 1145504 400
3016 1145633 400
3016 1145636 400
3016 1145677 400
3016 1145686 405
3037 1145885 400
3037 1145906 405
3037 1145922 400
3037 1145925 400
3162 1147324 400
3162 1147327 400
3162 1147329 400
3162 1147332 400
3162 1147334 405
3162 1147339 400
3162 1147341 405
3162 1147345 406
3162 1147347 410
(這只是實際數據的一個子集,但足以說明問題)。
問題:與Number = 400
但有以下的列選擇準確的所有行
查詢(如優雅和儘可能高效,優選沒有子查詢,光標等)加入:
Id_405
:的行的Id
與Number = 405
並且這400和下一個400之間的相同ParentId
,如上述有序按ID。這是保證最多有一個405 Id_405
爲空,如果不存在這樣的405
Id_406
:該行的Id
與Number = 406
,這400和下400之間的相同ParentId
,如上面下令ID。這是保證最多有一個406 Id_406
爲空,如果不存在這樣的406
Id_410
:該行與Number = 410
,這400和下400之間的相同ParentId
的ID,如上面下令ID。這是保證最多有一個406 Id_410
爲空,如果不存在這樣的410
通過上述例子的數據,查詢將返回:
ParentId Id Number Id_405 Id_406 Id_410
2997 1145445 400 null null null
2997 1145449 400 null null null
2997 1145577 400 1146518 null null
2999 1145470 400 null null null
2999 1145502 400 null null null
2999 1145504 400 null null null
3016 1145633 400 null null null
3016 1145636 400 null null null
3016 1145677 400 1145686 null null
3037 1145885 400 1145906 null null
3037 1145922 400 null null null
3037 1145925 400 null null null
3162 1147324 400 null null null
3162 1147327 400 null null null
3162 1147329 400 null null null
3162 1147332 400 1147334 null null
3162 1147339 400 1147341 1147345 1147347
請幫幫忙!
Id_405,Id_406和Id_410的概念不清楚。解釋清楚,以便人們可以回答這個問題。 –
您使用的是哪個版本的sql server? –
我不確定關於Id_405,Id_406和Id_410的什麼不清楚?他們在上面分別進行了解釋並給出了一個例子。我不知道還有什麼補充不知道你的想法不清楚。 – pinkfloydhomer