【问题标题】:TSQL Find Missing ValuesTSQL 查找缺失值
【发布时间】:2013-09-29 23:47:50
【问题描述】:

我有 2 张桌子:

TableA 是我们应该拥有每家公司的销售数据的所有可能周的日历。

TableB 包含已报告的每家公司每周销售额的财务数据。

TableA 列

[cmp_code, Year, Week]

表格B列

[cmp_code, Year, Week, sales]

查询条件:

1) 列出 TableB 中所有公司当年和上一年缺少的周数

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

我已经尝试过连接,但要么返回 0 个值,要么返回数百万个值。我真的不知道从哪里开始。

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

【问题讨论】:

    标签: sql sql-server database tsql sql-server-2008-r2


    【解决方案1】:

    这是一种方式:

    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
    

    【讨论】:

    • RBarryYoung,谢谢。它在哪里定义了前一年的值?
    • @NicholasJDininno 哎呀,这应该是第二个 LEFT 加入,但我忘了在前一年加入。等等……好的,现在修好了。
    • 这太棒了!奇迹般有效。谢谢你。我有最后一个问题,我保证我会让你一个人呆着。如果我添加“AND bPrev.othervalue IS NOT NULL”,则查询需要将近 2 分钟才能运行。如果没有该值,则需要 1 秒。知道为什么吗?
    • @NicholasJDininno 这确实是一个完全独立的问题(因为性能问题需要很多其他信息来分析),但猜测一下,只需确保将其添加到 bPrev @ 987654323@ 子句,而不是查询的 WHERE 子句。
    • 我已经尝试了您的建议,但似乎根本没有改变结果。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多