2013-09-24 83 views
0

我有2个表格:TSQL查找缺失值

表格A是所有可能的星期的日历,我们应该有每个公司的销售数据。

表B已经报告了每个公司每周的销售财务数据。

表A柱

[cmp_code, Year, Week] 

TABLEB列

[cmp_code, Year, Week, sales] 

查询条件:

1)名单周从表B本年度和上年度缺少对所有公司

2)L如果存在,则为该公司上一年的销售价值和周。 (例如,cmp 1234缺少2013年第13周,因此显示2012年那周的值)

我试过连接,但是我得到0值返回或返回的数百万个值。我真的不知道从哪里开始。

我对SQL很陌生,非常感谢提供的任何帮助。提前致谢。

回答

2

这是一种方式:

SELECT TableA.*, bPrev.sales 
FROM TableA 
LEFT OUTER JOIN TableB 
    ON TableA.cmp_code = TableB.cmp_code 
    And TableA.[Year] = TableB.[Year] 
    And TableA.[Week] = TableB.[Week] 
LEFT OUTER JOIN TableB As bPrev 
    ON TableA.cmp_code = bPrev.cmp_code 
    And TableA.[Year] = bPrev.[Year]+1 
    And TableA.[Week] = bPrev.[Week] 
WHERE TableB.cmp_code IS NULL 
+0

RBarryYoung,谢谢。它在哪里定义了前一年的价值? – d90

+0

@NicholasJDininno哎呀,它应该是第二个'LEFT'加入,但我忘记去年了。挂上...好的,现在就修好了。 – RBarryYoung

+0

这太棒了!奇迹般有效。谢谢。我有最后一个问题,我保证我会留下你一个人。如果我添加“AND bPrev.othervalue IS NOT NULL”,查询需要将近2分钟才能运行。如果没有这个价值,它需要1秒。任何想法为什么? – d90