【问题标题】:MySQL SELECT Field as NULL if NOT Exist in table如果表中不存在,则 MySQL SELECT 字段为 NULL
【发布时间】:2013-01-16 02:23:15
【问题描述】:

以下查询检索第 0 年的 Quarterly 数据。此查询成功检索了第 1、2 和 3 季度。

Year    Quarter    Quarterly_Yield
2012       3             6.6
2012       6             5.58
2012       9             7.28

问题:无论该季度是否存在数据记录,我都需要返回所有四个季度的“结果”。

期望的解决方案:我想指示每个季度 SELECT 字段“如果没有记录存在,则返回 NULL”。这样,我的表将包含所有 4 个季度的结果,无论该记录是否存在数据。

set @ID_CARTERA = 1;

select    

LEFT(A.F_ANOTRIMESTRE, 4 ) Year,
RIGHT(A.F_ANOTRIMESTRE, 2 ) Quarter,
ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield

from      dr_rent_carteras_trimestres A

where     A.ID_CARTERA = @ID_CARTERA
And       LEFT(A.F_ANOTRIMESTRE, 4 ) = ( select    MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
                                         from      dr_rent_carteras_trimestres
                                         where     ID_CARTERA = @ID_CARTERA ) 

【问题讨论】:

  • 为什么将数据存储在单个字段中?
  • 我没有创建数据库...

标签: mysql sql select not-exists


【解决方案1】:

对于这种类型的查询,您需要设置一个驱动程序表,其中包含您想要在输出中显示的所有行。您可以通过交叉连接年份和季度来获得此信息 - 如果我正确理解数据(即,季度是每年 1、2、3、4)。

下面显示了这是如何完成的:

select driver.year, driver.quarter,
       ROUND ( A.POR_RENTABILIDAD, 2 ) Quarterly_Yield
from (select y.year, q.Quarter
       from (select distinct  LEFT(F_ANOTRIMESTRE, 4 ) as Year
             from dr_rent_carteras_trimestres
            ) y cross join
            (select distinct  RIGHT(F_ANOTRIMESTRE, 2 ) as Quarter
             from dr_rent_carteras_trimestres
            ) q
     ) driver left outer join
     dr_rent_carteras_trimestres A
     on LEFT(A.F_ANOTRIMESTRE, 4 ) = driver.y and RIGHT(A.F_ANOTRIMESTRE, 2 ) = driver.q
where A.ID_CARTERA = @ID_CARTERA And
      driver.year = (select MAX(left(F_ANOTRIMESTRE, 4 ) ) - 0
                     from dr_rent_carteras_trimestres
                     where ID_CARTERA = @ID_CARTERA ) 

注意:我没有测试这个查询,所以它可能有语法错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2017-09-20
    • 2021-10-27
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多