【问题标题】:SQL Server : join 2 tables yielding required outputSQL Server:连接 2 个表产生所需的输出
【发布时间】:2022-01-21 00:23:44
【问题描述】:

我正在尝试加入 2 个表 TBL_ATBL_B 以使用滤色器获得所需的输出。

当过滤的Color 出现在TBL_B 中时,它工作得很好。

但是当过滤后的颜色值不在TBL_B中时,它不会返回所需的输出

这是我目前使用的代码:

DECLARE 
    @START_DATE DATETIME,
    @END_DATE DATETIME, 
    @COLOR VARCHAR(10)

SET @START_DATE = '2021-12-07' 
SET @END_DATE = '2021-12-08' 
SET @COLOR = 'Red'  -- can be Blue or Green based on requirement

SELECT      TBL_A.ID_CLM,
            TBL_A.DAY_CLM,
            TBL_A.DT_CLM,   
            TBL_B.CLR_CLM
FROM        TBL_A
LEFT JOIN   TBL_B 
ON          TBL_B.DT_CLM = TBL_A.DT_CLM
WHERE       TBL_A.DT_CLM BETWEEN @START_DATE AND @END_DATE 
            AND
            (TBL_B.CLR_CLM IS NULL OR TBL_B.CLR_CLM IS NOT NULL)

我实际需要的图形表示:

Image with different outputs and required one

【问题讨论】:

  • 您能否编辑您的帖子并包含示例数据和所需的输出作为文本而不是图像?
  • 请避免发布images的数据,示例数据应该是您问题中的consumable text,最好是createinsert 语句,或者DB<>Fiddle

标签: sql-server join


【解决方案1】:

您正在取消您的 OUTER 连接,因为您在 B 表上进行过滤... 只需像这样删除过滤器并将其设置到连接谓词中:

SELECT      ...
FROM        TBL_A
            LEFT OUTER JOIN TBL_B 
                 ON TBL_B.DT_CLM = TBL_A.DT_CLM
                    AND (TBL_B.CLR_CLM IS NULL OR TBL_B.CLR_CLM IS NOT NULL)
WHERE       TBL_A.DT_CLM BETWEEN @START_DATE AND @END_DATE 
       

【讨论】:

  • 你是天才,直截了当。太感谢了。只需稍作调整即可完全填充它而不是“TBL_B.CLR_CLM IS NULL OR TBL_B.CLR_CLM IS NOT NULL”,而是“TBL_B.CLR_CLM = @COLOR”。我已经投票并将其标记为答案,因为它指导我正确的路径:)
猜你喜欢
  • 2022-01-07
  • 2016-05-18
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多