如何使用Inner Join链接查询Master数据库,链接到彼此相同的2个子数据库

时间:2013-01-23 09:17:43

标签: sql-server

我有一个库存表,其中包含主文件信息和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。

1 个答案:

答案 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'

相关问题