SocialStatus
╔═════════════════════════════════════════════════════════════════╗
║ SocialStatusId | SocialTypeId | ResidentId | Details | IsActive ║
╠═════════════════════════════════════════════════════════════════╣
║ 16 | 5 | 2 | Sample | 1 ║
║ 17 | 6 | 4 | kgfhkhgf| 0 ║
║ 18 | 8 | 2 | NULL | 1 ║
║ 19 | 8 | 6 | NULL | 0 ║
║ 21 | 5 | 8 | asdasd | 1 ║
║ 22 | 5 | 3 | adasd | 0 ║
╚═════════════════════════════════════════════════════════════════╝
Resident
╔════════════╦═══════════╦════════════╦══════════╦════════════╦═════════╦══════════╦═══════════════╦═══════════════╦══════════╦══════════╗
║ ResidentId ║ FirstName ║ MiddleName ║ LastName ║ Birthdate ║ Address ║ GenderId ║ ContactNumber ║ IsNonResident ║ IsActive ║ StreetId ║
╠════════════╬═══════════╬════════════╬══════════╬════════════╬═════════╬══════════╬═══════════════╬═══════════════╬══════════╬══════════╣
║ 8 ║ Jonathan ║ Santos ║ Guinto ║ 2016-11-17 ║ Sample ║ 1 ║ 09107435739 ║ 0 ║ 1 ║ NULL ║
╚════════════╩═══════════╩════════════╩══════════╩════════════╩═════════╩══════════╩═══════════════╩═══════════════╩══════════╩══════════╝
SocialType
╔══════════════╦════════════════════════╦═════════════╦══════════╗
║ SocialTypeId ║ SocialName ║ Description ║ IsActive ║
╠══════════════╬════════════════════════╬═════════════╬══════════╣
║ 1 ║ Sample ║ Sample0001 ║ 0 ║
║ 2 ║ Sample2 ║ Sample222 ║ 0 ║
║ 3 ║ Sample3 ║ Sample3123 ║ 0 ║
║ 4 ║ Sample4 ║ Sample4 ║ 0 ║
║ 5 ║ Person with disability ║ Happy ║ 1 ║
║ 6 ║ Señior Citizen ║ Sample ║ 1 ║
║ 7 ║ Unemployed ║ sample ║ 1 ║
║ 8 ║ Indigence ║ sample ║ 1 ║
║ 9 ║ Rowllens ║ asdasdasd ║ 0 ║
║ 10 ║ ║ ║ 0 ║
╚══════════════╩════════════════════════╩═════════════╩══════════╝
从顶部到按钮是
我想要做的是加入SocialType和SocialStatus表,然后过滤,如果Resident有这个SeñiorCitizen然后有点列分配给 true 来说明更多请看输出表
我的查询
SELECT
st.SocialTypeId,
st.SocialName,
CASE WHEN ss.SocialStatusId IS NULL THEN CAST(1 AS bit) ELSE CAST(0 AS bit) END AS IsAssign
FROM dbo.SocialType st
LEFT JOIN dbo.SocialStatus ss ON st.SocialTypeId = ss.SocialTypeId
WHERE ss.IsActive = 1 AND ss.ResidentId = 8
此查询仅返回 SocialType 表的一列 输出
╔══════════════╦════════════════════════╦══════════╗
║ SocialTypeId ║ SocialName ║ IsAssign ║
╠══════════════╬════════════════════════╬══════════╣
║ 5 ║ Person with disability ║ 1 ║
╚══════════════╩════════════════════════╩══════════╝
欲望输出是这样的
╔══════════════╦════════════════════════╦══════════╗
║ SocialTypeId ║ SocialName ║ IsAssign ║
╠══════════════╬════════════════════════╬══════════╣
║ 5 ║ Person with disability ║ 1 ║
║ 6 ║ Señior Citizen ║ 0 ║
║ 7 ║ Unemployed ║ 0 ║
║ 8 ║ Indigence ║ 0 ║
╚══════════════╩════════════════════════╩══════════╝
答案 0 :(得分:1)
根据您的欲望结果,尝试下一个:
select
distinct st.SocialTypeId,
SocialName,
CASE
WHEN ss.SocialStatusId IS NULL
THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END AS IsAssign
from
SocialType st left outer join SocialStatus ss
on
st.SocialTypeId = ss.SocialTypeId
where
st.IsActive = 1
结果将如下: -
注意:
关于column
" IsAssign",您对1
equlas SocialTypeId
的渴望结果是5
altought ss.SocialStatusId
有数字! ,根据您使用的0
cluse,结果将是CASE
,是否有错误,请重新审视您的CASE线索。
更新取决于以下评论 -
For Filtering ss.residentId =8
在Join条件而不是Where子句中使用它。
如下: -
select
distinct st.SocialTypeId,
SocialName,
CASE
WHEN ss.SocialStatusId IS NOT NULL
THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END AS IsAssign
from
SocialType st left outer join SocialStatus ss
on
st.SocialTypeId = ss.SocialTypeId and
ss.residentId =8
where
st.IsActive = 1