1

MS Query の手動 SQL ステートメント ウィンドウを使用して、ODBC に接続されたデータベースからデータを取得するために、数日間 (grrr) 試みてきました。やりたいことはわかりますが、構文に行き詰まっています(これはMS Queryに固有のものであると確信しています)。

問題はこれです:

waybill, waybill_item, rail_bl、およびの4 つのテーブルがありrail_bl_item、これらの間には、トラック (Waybill) または鉄道 (rail) にルーティングされた貨物を使用して、出荷施設を通じて処理された重量に関する情報が含まれています。waybillおよびrail_blテーブルには、それぞれトラックおよび鉄道貨物の日付データが含まれています。waybill_itemとには、それらのアイテムrail_bl_itemの重量に関するデータが含まれています。

処理された合計重量 (鉄道とトラック輸送の両方) を毎日返すテーブルが必要です。IE

DATE | WEIGHT
date1, (truck_weight_for_date1+rail_weight_for_date1)
date2, (truck_weight_for_date2+rail_weight_for_date2)
date3, (truck_weight_for_date3+rail_weight_for_date3)
etc

クエリを実行することにより、

SELECT waybill.creation_date, sum(waybill_item.weight)
FROM waybill
INNER JOIN waybill_item
ON waybill.id = waybill_item.waybill_id
WHERE waybill.creation_date > '01/01/2012'
GROUP BY waybill.creation_date
UNION
SELECT rail_bl.creation_date, sum(rail_bl_item.total_weight)
FROM rail_bl
INNER JOIN rail_bl_item
ON rail_bl.id = rail_bl_item.rail_bl_id
WHERE rail_bl.creation_date > '01/01/2012'
GROUP BY rail_bl.creation_date
ORDER BY waybill.creation_date DESC

特定の日のトラックの総重量と特定の日の鉄道の総重量を別々のレコードに含む 2 列の結果を取得できるため、結果は次のようになります。

DATE | WEIGHT
date1, truck_weight_for_date1
date1, rail_weight_for_date1
date2, truck_weight_for_date2
date2, rail_weight_for_date2
date3, truck_weight_for_date3
date3, rail_weight_for_date3
etc

私がぶつかっている障害は、上記のクエリをサブクエリとして使用し、その後各日付のレコードを合計することを MS Query に受け入れさせることができないことです。私のクエリをサブクエリとしてテストしようとしてもうまくいきません。

たとえば、

SELECT * FROM
(
SELECT waybill.creation_date, sum(waybill_item.weight)
FROM waybill
INNER JOIN waybill_item
ON waybill.id = waybill_item.waybill_id
WHERE waybill.creation_date > '01/01/2012'
GROUP BY waybill.creation_date
UNION
SELECT rail_bl.creation_date, sum(rail_bl_item.total_weight)
FROM rail_bl
INNER JOIN rail_bl_item
ON rail_bl.id = rail_bl_item.rail_bl_id
WHERE rail_bl.creation_date > '01/01/2012'
GROUP BY rail_bl.creation_date
)
ORDER BY waybill.creation_date DESC

は、「テーブル '(' を追加できませんでした」というエラーを返します。他の構文バリアントでも同様のエラーが返されます。

MS Query がこのようなサブクエリを実行できる方法を知っている人はいますか? 助けてくれてありがとう。

4

1 に答える 1

0

これをサブクエリとして使用するには、エイリアスが 2 か所必要です。まず、列には名前が必要です。次に、派生テーブルには名前が必要です。

select *
from (SELECT waybill.Creation_date, sum(waybil_item.weight) as Weight
      . . .
      union all
      . . .
     ) t
order by 1 desc

ちなみに、UNION ではなく UNION ALL が必要です。特定の日付に同じ値があった場合、UNION はそれらを削除します。

于 2012-09-13T18:41:31.433 に答える