0

我有一个包含主文件信息的库存表和 2 个移动历史表(当年和去年)。

我想使用查询来提取从(例如)去年六月到今年三月的代码,日期序列中的运动。

我对 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 列中。

我必须对查询做些什么才能让每个运动都在自己的行中,或者是否有更好、更有效的查询来实现这一点?

另外,我需要代码中列出的运动,然后是日期序列。

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 并且包含时间,您必须更改t.Date <='2012/03/31't.Date <'2012/04/01'包含从 3 月 31 日开始的所有行,因为 '2012/03/31' 被转换为 '2012/03/31 00:00 :00.000'

于 2013-01-23T09:21:47.633 回答