0

週末の日付でデータベースから値を並べ替えようとしています。私が使用しているスクリプトは、7 つのデータベースのうち 6 つの関数で使用されています (それらはすべて同じように構成されています)。7 番目のデータベースが機能しません。式が複雑すぎるというエラーが発生します。理由を理解するのに役立ちますか??

これが私のコードです:

 SELECT UPC_Test.Type, 
        UPC_Test.[Model No], 
        UPC_Test.[Model Desc], 
        UPC_Test.[Serial No], 
        Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
        UPC_Test.Parameter, 
        UPC_Test.[Failure Symptom], 
        UPC_Test.[Repair Action], 
        UPC_Test.[Factory Select], 
        UPC_Test.[Test Station]
FROM UPC_Test
GROUP BY UPC_Test.Type, 
         UPC_Test.[Model No], 
         UPC_Test.[Model Desc], 
         UPC_Test.[Serial No], 
         Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"), 
         UPC_Test.Parameter, 
         UPC_Test.[Failure Symptom], 
         UPC_Test.[Repair Action], 
         UPC_Test.[Factory Select], 
         UPC_Test.[Test Station]
HAVING (((UPC_Test.Type)="Production") 
AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy"))=[Enter]) 
AND ((UPC_Test.[Failure Symptom])<>"") 
AND ((UPC_Test.[Repair Action])<>"") 
AND ((UPC_Test.[Test Station])="UPC RF Test"))
ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy");
4

2 に答える 2

1

選択行に合計、カウントなどの集計列がある場合、group by 句が使用されます。I could not see you had any - これは、返される行を制限するために使用されます

したがって、クエリを集計列と照合する group by を取り除き、その所有を where 句に変えることができます。

フィールド名にスペースを含めることは非常に悪い習慣であると考えられており、何度も噛み付くことになります。これには、データベース スキーマの変更が必要です。

クエリの変更を追加しました (未テストでアクセス権がありません)

   SELECT UPC_Test.Type, 
    UPC_Test.[Model No], 
    UPC_Test.[Model Desc], 
    UPC_Test.[Serial No], 
    Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[Test Date],0)),"m/d/yyyy") AS [Test Date], 
    UPC_Test.Parameter, 
    UPC_Test.[Failure Symptom], 
    UPC_Test.[Repair Action], 
    UPC_Test.[Factory Select], 
    UPC_Test.[Test Station]
 FROM UPC_Test
     WHERE (((UPC_Test.Type)="Production") 
     AND ((Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy"))=[Enter]) 
     AND ((UPC_Test.[Failure Symptom])<>"") 
     AND ((UPC_Test.[Repair Action])<>"") 
     AND ((UPC_Test.[Test Station])="UPC RF Test"))
     ORDER BY Format(DateValue([UPC_Test].[Test Date]+7-Weekday([UPC_Test].[TestDate],0)),"m/d/yyyy");
于 2013-06-28T22:13:15.050 に答える
0

問題を引き起こさない部分を排除できるように、クエリと返されるフィールドを減らしてみてください。エラーの原因ではないものを知ることができれば、エラーの原因の特定に近づきます。

計算されたフィールドと制限を最も詳しく調べます。おそらく、一部の不適切なデータが未定義になる可能性があるためです (2013 年 2 月 30 日を日付にフォーマットするなど)。

7 番目のデータベースのデータのサブセットを使用して、不良データがあるかどうかを追跡してみてください。データベースのコピーを作成し、エラーが発生することを確認します。レコードの前半を削除し、まだ発生するかどうかを確認します。そうでない場合は、別のコピーを入手して、データの後半だけで試してください。一方の半分で失敗し、もう一方の半分で失敗した場合は、データである可能性が非常に高いため、追跡するために半分をもう一度削除し始めます。

于 2013-06-28T22:58:12.083 に答える