sql - 保留特定日期和不同的空值
问题描述
我有以下存储过程
ALTER PROCEDURE [dbo].[sp_GetFeedDate10_TEST]
-- sp_GetFeedDate10_TEST '05/30/2018'
@daycurrent DATE
AS
BEGIN
SELECT
TANK.Name, TANK.Tank_Pond_uID,
FEED.FeedValue, FEED.Date
FROM
aa_Tanks_Ponds TANK
LEFT JOIN
aa_Feed_Chart FEED ON TANK.Tank_Pond_uID = FEED.Tank_Pond_uID
WHERE
TANK.Site_Name = 'Dry Creek' --and (FEED.Date = DATEADD(DAY, -10, @daycurrent))
ORDER BY
TANK.Tank_Pond_uID
END
我注释掉了“和
(FEED.Date = DATEADD(DAY, -10, @daycurrent))
我目前在过滤方面遇到问题。连接是拉出一个坦克列表,并与另一个列表中的任何提要值和日期连接。
我遇到麻烦的地方是在根据日期进行过滤时,我会丢失所有不包含值的坦克的所有不同的 NULLS。保持结果与 TANK 表相同的行和顺序很重要。
这是第一个表的示例:
Name Tank_Pond_uID
--------------------
B01 DCB01
B02 DCB02
B03 DCB03
B04 DCB04
B05 DCB05
第二个表的示例:
Site_Name Tank_Pond_uID Date FeedValue
--------------------------------------------------
Dry Creek DCB01 2018-05-20 90
Dry Creek DCB02 2018-05-20 90
Dry Creek DCB03 2018-05-20 90
我在上面运行带有日期的存储过程:
sp_GetFeedDate10_TEST '05/30/2018'
(我知道日期无关紧要,因为注释掉的部分需要它),我得到以下结果:
Name Tank_Pond_uID FeedValue Date
-----------------------------------------------
B01 DCB01 90 2018-05-20
B01 DCB01 90 2018-05-21
B01 DCB01 90 2018-05-22
B02 DCB02 90 2018-05-20
B02 DCB02 90 2018-05-21
B02 DCB02 90 2018-05-22
B03 DCB03 NULL NULL
B04 DCB04 NULL NULL
B05 DCB05 NULL NULL
当我将注释部分添加回 Store 过程并再次运行时,我得到以下结果:
Name Tank_Pond_uID FeedValue Date
-----------------------------------------------
B01 DCB01 90 2018-05-20
B02 DCB02 90 2018-05-20
我希望预期的结果是保留左行并仍然过滤日期:
预期表格结果示例:
Name Tank_Pond_uID FeedValue Date
-----------------------------------------------
B01 DCB01 90 2018-05-20
B02 DCB02 90 2018-05-20
B03 DCB03 NULL NULL
B04 DCB04 NULL NULL
B05 DCB05 NULL NULL
解决方案
您已将您的左连接变成了带有 where 子句中谓词的内连接。将日期谓词移动到联接中,这将起作用。
select TANK.Name
, TANK.Tank_Pond_uID
, FEED.FeedValue,FEED.Date
from aa_Tanks_Ponds TANK
LEFT JOIN aa_Feed_Chart FEED ON TANK.Tank_Pond_uID = FEED.Tank_Pond_uID
and FEED.Date = DATEADD(DAY, -10, @daycurrent)
where TANK.Site_Name = 'Dry Creek'
order by TANK.Tank_Pond_uID
推荐阅读
- javascript - Bootstrap 折叠开始打开/折叠取决于 CheckBox 值
- stress-testing - 使用打乱图像的 K6 压力测试
- pagespeed - 如何衡量网站上的页面到页面速度?
- infinispan - 使用 infinispan 5.3 的 2 节点集群中的问题 | ActionStatus.ABORT_ONLY > 未处于有效状态,无法调用缓存操作
- laravel - 预期的响应代码 354 但在 laravel 7 中得到一个空响应“500”
- database-administration - 在greenplum中管理溢出文件
- python - 通过 Anaconda 安装“imputeTS”以在 Python 中使用
- php - 如何更改 mysql 中的事件并更改正在运行的内容
- reactjs - 如何使用 redux 呈现 API 响应并做出反应
- sql - 对用户响应强制超时 SQL Oracle