我有一个库存表,其中包含主文件信息和2个移动历史表(当前年份和去年)。
我想使用查询从代码,日期序列中的(比如)去年6月到今年3月提取移动。
我是SQL的新手,并尝试使用以下INNER JOIN结构来执行此操作:
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 |
...其中LAST Year表中的数据显示在第一个Date / DocNo列中,CURRENT Year数据显示在第二个Date / DocNo列中。
我必须对Query做什么才能让每个Move都在自己的行中,或者是否有更好,更有效的Query来实现这一目标?
另外,我需要Code中列出的Movements,然后是Date sequence。
答案 0 :(得分: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'
除了小心比较日期外,如果日期列是类型日期时间,并且包含时间,则必须将t.Date <='2012/03/31'
更改为t.Date <'2012/04/01'
以包括3月31日的所有行,
'2012/03/31'的版本为'2012/03/31 00:00:00.000'