【问题标题】:Missing value after join two query加入两个查询后缺少值
【发布时间】:2016-04-14 12:36:28
【问题描述】:

我有疑问:

select 
       coalesce(t1.L1, t4.L2) as L1, 
       coalesce(t1.L2, t4.L2) as L2, 
       coalesce(t1.S, t4.S) as S,
       coalesce(t1.Q, t4.Q) as Q,
       coalesce(t1.Value, 0) as Value, 
       coalesce(t4.Prev_Value, 0) as Prev_Value
from (
  select L1, L2, S, Q, sum(value) as Value
  from table1
  group by L1, L2, S, Q
  ) as t1
left join
(
  select L1, L2, S, Q, sum(value) as Prev_Value
  from table1
  group by L1, L2, S, Q
) as t4 on
t1.L1 = t4.L1 and
t1.L2 = t4.L2 and
t1.Q = cast((cast(left(t4.Q,4) as numeric) +1) as varchar)+right(t4.Q,2) and
t1.S = t4.S

我现在得到了结果:

我知道到 FY2015Q1 我没有 C 值(对于 S1 列)。 但是如何显示缺失值呢?

FULL OUTER JOIN 的结果:

【问题讨论】:

  • 我尝试了完全加入,但我得到了很多行......
  • table1中是否存在Q列FY2015Q1和S列C的行?
  • 是的,C 值只存在于 FY15Q1
  • 我认为这是您的问题:t1.L1 = t4.[Sales Level 1] and t1.L1 = t4.[Sales Level 2] and t1.Q = cast((cast(left(t4.Q,4) as numeric) +1) as varchar)+right(t4.Q,2) and t1.S = t4.S => 第二行应该是 t1.L2 = ..... 或者这可能只是您解决方案的一部分。无论如何都要改变它:)
  • 打错了,我有 t1.L1=t2.L1 和 t1.L2=t2.L2....

标签: sql-server sql-server-2008 join null jointable


【解决方案1】:

使用 FULL OUTER JOIN,但包含一个 WHERE 子句,从 t4 表中删除您不想看到的行。

【讨论】:

  • -> 你能举个 WHERE 的例子吗?
  • 我想查看所有行:如果您制作 FY2015Q1 过滤器,Prev_Value 的总和应该等于 FY2014Q1 的值总和
  • 我看不到你的数据。请使用完全外部联接的结果示例编辑您的问题,以及要过滤掉哪些行以及原因。
  • 标签结果应该像第二张图片上的样子
  • 除非您发布完全外部联接的结果,否则我无法举例。
【解决方案2】:

也变了

t1.Q = cast((cast(left(t4.Q,4) as numeric) +1) as varchar)+right(t4.Q,2)

到

t1.Q = 'FY'+cast((cast(substring(t4.Q,3,6) as numeric) +1) as varchar)+right(t4.Q,2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多