0

マスターファイル情報と2つの移動履歴テーブル(現在の年と昨年)を含むインベントリテーブルがあります。

クエリを使用して、(たとえば)昨年の6月から今年の3月までの動きをコード、日付の順序で抽出したいと思います。

私はSQLに比較的慣れておらず、これを行うために次のINNERJOIN構造を使用しようとしました。

SELECT Code, Descrip, Category, MLast.Date, MLast.DocNo, MCurr.Date, MCurr.DocNo
    FROM Stock AS S 
INNER JOIN MoveTrnArc MLast ON MLast.Stockcode = S.Code
    AND MLast.Date >='2011/06/01' AND MLast.Date <='2012/03/31'
INNER JOIN MoveTrn MCurr ON MCurr.Stockcode = S.Code 
    AND MCurr.Date >='2011/06/01' AND MCurr.Date <='2012/03/31'
ORDER BY S.Code

これにより、次の列構造を持つクエリテーブルが作成されます。

Code | Descrip | Category | Date | DocNo | Date | DocNo | 

...LASTYearテーブルのデータが最初のDate/DocNo列に表示され、CURRENTYearデータが2番目のDate/DocNo列に表示されます。

各ムーブメントを独自の行に配置するには、クエリに対して何をする必要がありますか、それともこれを実現するためのより優れた、より効率的なクエリがありますか?

また、コードにリストされているムーブメントとそれに続く日付シーケンスが必要です。

4

1 に答える 1

0

union allの代わりに使用joins

select s.Code , s.Descrip , s.Category , t.Date , t.DocNo  
from 
(
select Stockcode, Date, DocNo from MoveTrnArc 
union all
select Stockcode, Date, DocNo from MoveTrn 
) t join Stock s on s.Code = t.Stockcode
where t.Date >='2011/06/01' AND t.Date <='2012/03/31'

日付の比較に注意することに加えて、Date列がdatetime型であり、3月31日からのすべての行を含めるために変更t.Date <='2012/03/31'する必要がある時間を含む場合t.Date <'2012/04/01'、「2012/03/31」は「2012/03/3100:00」としてキャストされます。 :00.000 '

于 2013-01-23T09:21:47.633 に答える