4

修理のために返品された商品を追跡する必要があるテーブルがあるので、処分、問題、および商品を受け取って発送した時期を追跡します。

テーブル名:RMAItems
 id | RMANbr | PartNbr | RecvDate |
-----------------------------------------
 1 | 12345 | 456-003 | 2012年12月21日|
 2 | 12345 | 434-007 | 2012年12月21日|
 3 | 12346 | 422-010 | |
 4 | 12347 | 421-540 | 2012年12月21日|
 5 | 12347 | 460-000 | |
 6 | 12348 | 459-006 | 2012年12月26日|
 7 | 12349 | 439-007 | |
 8 | 12349 | 435-006 | |   

'Recv Date'列は、3つのうちNULL(つまり、値なし)になることができる唯一の列です。idは主キー(重複なし)であり、RMA Nbr列は重複する可能性があります(顧客に割り当てられたRMA Nbrごとに複数のアイテムが存在する可能性があるため)。Recv Date列は、受信済みとしてマークし、フォームが別のクエリを介して自動的に日付を入力するまで、NULLにすることができます。

RecvDateフィールドがNULLであるRMANbr列の個別のレコードの量をカウントするためにAccess2003でクエリが必要です(私の会社は貧弱で、現在アップグレードできません)(つまり、RMAの量を知る必要があります)すべてのアイテムを受け取っていないNbr)。上記のデータベースで必要なクエリを実行すると、受信されていないアイテムが含まれているRMA Nbrが3つあるため、3が返されると予想されます。

次のクエリを試しましたが、成功しませんでした。

SELECT Count(RMANbr)
RMAItemsから
WHERERecvDateがNullです。

(4を返します)

SELECTカウント(*)
RMAItemsから
WHERERecvDateがNullです。

(4を返します)

SELECTカウント(*)
FROM(SELECT DISTINCT RMANbr FROM RMAItems)
WHERERecvDateがNullです。

(このクエリを実行すると、テキストボックスとテキストボックスの上に「RecvDate」が表示されたダイアログボックスがポップアップ表示されます)

前述のように、私はWindows XPProSP3マシンでMSAccess2003を使用しています。

私はいくつかのグーグルを行ったが、私がそれをするのに必要なことをするクエリを思い付かなかった(それが私がうまくいかなかった上記のサブクエリを思いついた方法である)。あなたが提供できるどんな助けも素晴らしいでしょう。

ありがとう。

4

1 に答える 1

2

3番目のサンプルと同様のアプローチを使用しますが、WHERE句をサブクエリに移動します。パラメータダイアログボックスが表示された理由RecvDateは、そのフィールドがサブクエリSELECTリストに含まれていなかったため、親クエリで不明/使用できなかったためです。

SELECT Count(*)
FROM
    (
        SELECT DISTINCT RMANbr
        FROM RMAItems
        WHERE RecvDate Is Null
    ) AS sub;
于 2012-12-26T20:14:58.877 に答える