【问题标题】:Join Multiple Select queries with where clauses for each使用 where 子句连接多个 Select 查询
【发布时间】:2017-06-21 19:54:49
【问题描述】:

所以我有一系列摊销计划,我想运行查询以返回每个计划中 5 月份的余额

我现在的查询,看起来像这样

select ace.date, ace.balance, aacs.date, aacs.balance, 
axl.date, axl.balance, la.date, la.balance, 
mrh.date, mrh.balance
from 
(select *
from [Entity1]
where MONTH (date) = 05 AND YEAR (date) = 2017) as ACE
full join
(select *
from [Entity2]
where MONTH (date) = 05 AND YEAR (date) = 2017) as AACS
on ACE.GLCredited = AACS.GLCredited
full join 
(select *
from [Entity3]
where MONTH (date) = 05 AND YEAR (date) = 2017) as AXL
on AXL.GLCredited = AACS.GLCredited
full join
(select *
from [Entity4]
where MONTH (date) = 05 AND YEAR (date) = 2017) as LA
on LA.GLCredited = AXL.GLCredited 
full join 
(select *
from [Entity5]
where MONTH (date) = 05 AND YEAR (date) = 2017) as MRH
on MRH.GLCredited = LA.GLCredited 

这是它返回的内容

    date     |  balance     |    date      |    balance   |    date      |    balance   |    date      |    balance   |    date      |    balance    | 
------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------  |
NULL         | NULL         | 2017-05-31   | 563275.00    | NULL         | NULL         | NULL         | NULL         | NULL         | NULL          |
------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------  |
2017-05-31   | 896337.00    | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL          |
------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------  |
NULL         | NULL         | NULL         | NULL         | 2017-05-31   | 3746167.00   | NULL         | NULL         | NULL         | NULL          |
------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------  |
NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | 2017-05-01   | 474774.00    | NULL         | NULL          |
------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------  |
NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | NULL         | 2017-05-31   | 127987.00     |

您知道有什么方法可以返回没有空值的数据吗?

Picture of database

【问题讨论】:

  • SELECT column_names FROM table_name WHERE column_name IS NOT NULL;
  • 试过了。结果相同。
  • 您需要精确地指定您希望输出在输入方面的样子。您给我们的只是一个模糊的摘要和一个不符合您要求的查询及其输出示例。我们无法读懂你的想法。另请阅读minimal reproducible example 并采取行动。也请尽可能使用文本,而不是那个链接。
  • 我说我需要一个查询来返回没有空值的数据......也许你忽略了。我相信这是非常具体的......如果你不能帮助我希望你不要批评,特别是如果你要求我做的事情是正确的。

标签: sql sql-server join accounting datepart


【解决方案1】:

您可以使用联合而不是联接来执行此操作。比如:

select date, balance
from [Entity1]
where MONTH (date) = 05 AND YEAR (date) = 2017) as ACE
union
select date, balance
from [Entity2]
where MONTH (date) = 05 AND YEAR (date) = 2017) as AACS
on ACE.GLCredited = AACS.GLCredited
union
select date, balance
from [Entity3]
where MONTH (date) = 05 AND YEAR (date) = 2017) as AXL
on AXL.GLCredited = AACS.GLCredited
union
select date, balance
from [Entity4]
where MONTH (date) = 05 AND YEAR (date) = 2017) as LA
on LA.GLCredited = AXL.GLCredited 
union
select date, balance
from [Entity5]
where MONTH (date) = 05 AND YEAR (date) = 2017) as MRH
on MRH.GLCredited = LA.GLCredited 

【讨论】:

  • 当您键入它时,它也不起作用,别名将其丢弃。一旦我更正它,它会显示一个更好的日期和余额列表,但仍然不能帮助我识别余额所属的实体
  • 只需为每个选择添加一个静态值列,例如:
  • 我昨晚想到了这个,非常完美。这很棒。感谢您的帮助迈克!
【解决方案2】:

你可以使用UNION:

Select * 
FROM
(
select 'ACE' as ScheduleName, date, balance from [Entity1]
union
select 'AACS' as ScheduleName, date, balance from [Entity2]
union
select 'AXL' as ScheduleName, date, balance from [Entity3]
union
select 'LA' as ScheduleName, date, balance from [Entity4]
union
select 'MRH' as ScheduleName, date, balance from [Entity5]
)u
where MONTH (date) = 05 AND YEAR (date) = 2017

【讨论】:

    【解决方案3】:

    您可以轻松地在所有子查询中添加 IS NOT NULL。因此,您从子查询中获得的回报将不包括 NULL

      ....
      from 
       from [Entity1]
       where MONTH (date) = 05 AND YEAR (date) = 2017 and *DATE is not null*) as ACE
      join
     (select *
      from [Entity2]
       where MONTH (date) = 05 AND YEAR (date) = 2017 *and BALANCE is not null*) as AACS
      on ACE.GLCredited = AACS.GLCredited
      join 
    

    【讨论】:

    • 试过了。返回与上面相同的结果,令人惊讶。
    • 您是否尝试只进行 JOIN 而不是 FULL JOIN?如果您只使用 DATE IS NOT NULL 运行 1 个子查询,它仍然返回 NULL 吗?
    • 当我将查询作为 JOIN 而不是 FULL JOIN 运行时,我得到零结果我还尝试按照您的建议只运行 1 个子查询,结果集不会改变
    • 有些不对劲。如果编写正确,子查询不应返回 NULL。您介意发布您正在使用的数据库示例吗?
    • 当然,我只是在原帖中放了一张照片的链接
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 2023-04-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多