2009-06-23 19 views
2

クエリ:このクエリでMS Access SQL重複行?

SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job 
FROM [Equipment List] LEFT JOIN [Job Assignments] 
    ON [Equipment List].ID = [Job Assignments].EquipmentID; 

、機器IDは、私はselect文で[ジョブの割り当て] .JOBを追加しない場合にのみ明瞭です。私がするとすぐに、私は多くの重複を取得します。 Job Assignmentsテーブルには多くのジョブがありますが、私は[Date Returned]が空白またはnullのものだけに興味があります。どのようにこれを達成するためのアイデア?私はこれをレポートとして使用しているので、内部SQLクエリを使用しようとするとエラーが発生します。また、これは簡略化されたクエリーです。オリジナルには複数の選択肢があります。私は間違って何をしていますか?どんな助けでも大歓迎です。

更新:[ジョブ割り当て]テーブルから1行だけを選択します。何か案は?

答えて

3

DISTINCTは、SELECT文のすべての列の異なる組み合わせを返します。そのため、2番目の列を導入すると、ダブが導入されます。あなたが「空白」の日付を持つことができませんので、あなたは空白を見ているならば、チャンスはあなたが使用していないです

SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job 
FROM [Equipment List] 
LEFT JOIN [Job Assignments] ON [Equipment List].ID = [Job Assignments].EquipmentID 
WHERE [Job Assignments].[Date Returned] IS NULL 

:あなたはWHERE句で逃げることができますようにそれが聞こえる

日時タイプあなたの日付を保存する - この場合には、あなたが言う必要があります:

WHERE COALESCE([Job Assignments].[Date Returned], '') = '' 

は編集:以下のコメントをもとに最新のソリューション:

;WITH LatestJobs 
AS 
(SELECT  ja.EquipmentID, ja.Job, 
      ROW_NUMBER() OVER (PARTITION BY EquipmentID 
           ORDER BY [Date Returned] DESC) AS RowNumber 
FROM  [Job Assignments] AS ja) 

SELECT  el.ID AS EquipmentID, 
      lj.Job 
FROM  [Equipment List] AS el 
LEFT JOIN LatestJobs AS lj ON el.ID = lj.EquipmentID 
      AND lj.RowNumber = 1 
+1

非常に良いですが、[Equipment List] .IDと[Job Assignments] .EquipmentIDは一意でなければなりません。それをどうやってやりますか? Distinct [Equipment List] .IDは両方のテーブルで異なるIDのみを選択する必要がありますか? – Tudor

+0

フィールドの異なる組み合わせを選択します。たとえば、[Equipment List] .ID = 12&[Job Assignments] .Job = 27の行があり、2行目に同じ値がある場合は、1つだけが返されます。ただし、[Equipment List] .ID = 12&[Job Assignments] .Job = 28の3番目の結果が得られた場合は、ジョブ27とジョブ28の2つの行が表示されます。Equipment ID両方の行で同じでしたが、COMBINATIONが一意であるため、両方の行が戻されます。それは理にかなっていますか? –

+1

はい、それは完璧な意味があります。最新の仕事だけをどうやって取得するのですか?私はEquipmentIDに基づいて組み合わせの1つをしたいだけです。だから教えてくれたEquipmentID私はただ一つ[仕事の割り当て] .Job – Tudor

0

selectの各フィールドのデータ型は何ですか? longchar(sql)またはmemo(アクセス時)の場合、distinct関数を使用することはできません。

関連する問題