首页 > 解决方案 > 具有多个日期和 ID 号的多个联接当特定日期/ID 的一列不存在时省略所有列

问题描述

我正在使用子查询从多个表中提取数据。我想要日期范围内的所有日期(在本例中为财政周)的所有 ID 号(在本例中为餐厅编号)。我从每个子查询中提取一列,但如果一列(子查询)不包含特定周的数据和 ID 号,则省略整行,即使该特定日期的所有其他列都有数据/ ID。

我得到的最接近的是使用 CASE WHEN NOT EXIST。这将返回语句中的日期和 ID 以及占位符数据,但它会重复行。

select R.restaurantNumber, P.JobCodeKey,
case when not exists (select 1 from FactEmployeePayrollDay P where P.JobCodeKey = 18 and P.RestaurantKey = 190
and BusinessDateKey = 20190205 ) 
then 77 else p.hours end as hourz,
P.BusinessDateKey
from DimRestaurant R
join FactEmployeePayrollDay P on P.restaurantkey = r.RestaurantKey
join DimJobCode J on J.JobCodeKey = p.JobCodeKey
where R. RestaurantNumber = 195
and P.BusinessDateKey = 20190205
group by r.RestaurantNumber, p.Hours, p.BusinessDateKey, P.JobCodeKey

这是我一直在测试不同事物的代码的小版本。这是我尝试过的唯一返回任何内容的代码。但是我得到了重复的数据(占位符和日期/ID)。如果我仅从表中提取该日期和 ID(餐厅编号),FACTEMPLOYEEPAYROLLDAY则有 27 行,但我的查询仅返回 26。(我只希望返回一行)。

标签: sql

解决方案


推荐阅读