まず、私は苦労してるテーブル遭遇したとき:サブから結果セットを使用してSELECT重複行がすべての
DispatchLocations
=================
DispatchID int
StopNumber int
Arrived bool
Departed bool
を考えはトラック輸送ルート上で、中に多くの停止があるということですディスパッチ。これは、各ディスパッチ上の各ロケーションのリストです(本質的にルートテーブルです)。このビューでは、ディスパッチが存在する「現在の停止」を指す、出力の各行に対して1つのディスパッチのみが存在する必要があります。今のよう
SELECT TOP 4
DispatchID,
Min(StopNumber) AS NextStop,
Arrived,
Departed
FROM DispatchLocations
GROUP BY
DispatchID,
Arrived, Departed
HAVING (Arrived = 0 OR Departed = 0)
ORDER BY DispatchID ASC, NextStop ASC
マイビューの出力:GROUP BYは、出力の一意性を壊し、到着と出発のステータスを含まなければならないので、
Dispatch_ID NextStop Arrived Departed
=========== ======== ======= ========
3 2 False False
1356 2 False False
6410 1 True False
6410 2 False False
は、最後の行がでダンプされています。
希望行は(のみ)に非常に類似したクエリを使用して抽出することができます。
SELECT
DispatchID,
Min(StopNumber) AS NextStop,
Arrived,
Departed
FROM DispatchLocations
GROUP BY
DispatchID,
Arrived, Departed
HAVING
(Arrived = 1 AND Departed = 0) AND Min(StopNumber) = 1
ORDER BY DispatchID ASC
Dispatch_ID NextStop Arrived Departed
=========== ======== ======= ========
6410 1 True False
50589 1 True False
50687 1 True False
は私が私の見解
WHERE COUNT(DispatchID) > 1
からすべてのDispatchIDsを選択することで、これらの結果を検証しました。
ビュー内で一致するIDが見つかるたびに、2番目のクエリの結果を使用するにはどうすればよいですか? EXIST
またはEXCEPT
句をHAVING
のクエリテキストに含めることができません。だから、私は結果をデータベースの手に渡し、アプリケーションロジックが重複した結果を並べ替え、各ディスパッチIDに対して最初に見つかったものだけを保持するようにしています。しかし、私はむしろデータベースを使ってこれを私に任せています。
UPDATE
私はデフォルトで含まTOP 100 PERCENT
と意見を構築SSMS 2008を、使用しています。オリジナルのpastebinは次のとおりです。これは、各ディスパッチIDの最安stopnumberの詳細を返します
SELECT dl.DispatchID,
dl.StopNumber AS NextStop,
dl.Arrived,
dl.Departed
FROM DispatchLocations dl
INNER JOIN
( SELECT DispatchID, MIN(StopNumber) [StopNumber]
FROM DispatchLocations
GROUP BY DispatchID
) MinDL
ON MinDL.DispatchID = dl.DispatchID
AND MinDL.StopNumber = dl.StopNumber
:
これはどのRDBMSですか?私はあなたが 'VIEW'に' ORDER BY'を持っているので、SQL Serverを推測していません。 – JNK
@JNK - ビューで、または有効なテーブル式が期待されるところで、 'TOP'とともに' ORDER BY'を使うことができます。 –
@JCooper投稿したビューの定義に 'TOP'がないことに気づきます – JNK