【问题标题】:SQL query doesnt return all monthsSQL 查询不返回所有月份
【发布时间】:2019-09-23 11:11:13
【问题描述】:

我在显示日期时遇到问题

#dates 仅包括从 2 年前到当前形式的 monts(2018-01、2018-02、2018-03 等) 表 QA_Ratio 包括项目及其每月生产计数。某个月没有生产该项目(在 QA_Ratio 中不是记录)。但是,如果我将 #dates 表左连接到 QA_Ratio,并按特定项目过滤,则生产中仍然只有几个月,即使没有记录(例如使用 NULL),我也想显示 每个月。 这是代码:

   Select
    #dates.frame
     ,Material 
     ,NG_qty 
     ,Ratio
    FROM QA_Ratio
    Left join #dates ON #dates.frame = QA_Ratio.frame COLLATE Czech_CI_AS
    Where Material = '3p326040-2 V'
Order by frame

这个节目

2018-05 3P326040-2 V        0   0
2018-06 3P326040-2 V        0   0
2018-07 3P326040-2 V        0   0
2018-08 3P326040-2 V        0   0
2018-09 3P326040-2 V        0   0
2018-10 3P326040-2 V        13  1
2018-11 3P326040-2 V        65  1
2018-12 3P326040-2 V        550 8
2019-01 3P326040-2 V        503 240
2019-02 3P326040-2 V        187 19
2019-03 3P326040-2 V        402 4
2019-04 3P326040-2 V        202 6
2019-07 3P326040-2 V        2   0

所以没有 2019-05 和 2019-06。如何包含丢失的飞蛾?

谢谢

【问题讨论】:

  • 材料属于 QA_Ratio
  • DBMS ... 可以是 T-SQL

标签: sql sql-server date missing-data


【解决方案1】:

您的主要问题是您需要获取#dates 表,然后加入 QA_Ratio。

这样您就可以在未连接的行上获得所有日期和 NULL-s。

我们只是在选择中使用 ISNULL 格式化结果。

DECLARE @date_from  DATE =  '2018-01-01'
DECLARE @type       NVARCHAR(32) =  '3p326040-2 V'

SELECT
    frame       =   d.frame
,   Material    =   ISNULL(qar.Material , @type)
,   NG_qty      =   ISNULL(qar.NG_qty   , 0)
,   Ratio       =   ISNULL(qar.Ratio    , 0)
FROM    
                #dates      AS d
    LEFT JOIN   QA_Ratio    AS qar  ON  qar.frame = d.frame
                                    AND qar.Material = @type
WHERE   1 = 1
    AND d.frame >= @date_from
ORDER BY
    d.frame

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2023-02-22
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多