我有一堆值(地 block ),我需要检查数据库以确保它们都已经存在。有时有数百个这样的包裹。我想基本上返回一个真值或假值,这样我就可以找出哪个值不存在并解决该特定的包裹。日期方面我需要始终按前一年进行过滤。我对 SQL 很陌生,因此非常感谢您的帮助。
我已经尝试过这个:
SELECT *,
CASE WHEN EXISTS (SELECT * FROM Property WHERE taxyear = YEAR(GETDATE()) - 1 and (parcel in
('1719309002000',
'1024247013000',
'1024247008000',
'1024247001000'))
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END AS ExistsStatus
FROM Property
和
SELECT Parcel, Powner, taxyear,
CASE WHEN taxyear = YEAR(GETDATE()) - 1 and (parcel in
('1719309002000',
'1024247013000',
'1024247008000',
'1024247001000'
))
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END AS result_field
FROM Property;
它只是遍历表中的每个地 block ,输入 0 或 1,我只想要我给出的值的结果。
最佳答案
我建议使用值表来exists
。这将防止结果集中出现重复:
SELECT v.parcel,
(CASE WHEN EXISTS (SELECT 1
FROM Property p
WHERE p.taxyear = YEAR(GETDATE()) - 1 AND
p.parcel = v.parcel
)
THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT)
END) AS ExistsStatus
FROM (VALUES ('1719309002000'),
('1024247013000'),
('1024247008000'),
('1024247001000')
) v(parcel)
关于SQL - 如果表中存在值,如何返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56296476/