SQL - 如果表中存在值,如何返回 bool 值

标签 sql sql-server

我有一堆值(地 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/

相关文章:

sql - 无法重命名临时表的列

SQL Server 从查询返回的表中选择作为表名列表

java - 在代码(Java)中或使用触发器(MySQL)在数据库中以编程方式更新数据?

python - SQLAlchemy 查询动态字段

sql - 如何获取 SQL Server 表中的第 n 行?

mysql - Node.js MySQL 批量插入操作失败

sql - 将 "Arnold Schwarzenegger"和 "Hasta la vista baby"插入到这两个空 SQL 表中,我的 SQL 语句是什么?

SQL Server 存储过程更新并返回单个值

sql - 在 SQL GROUP BY 查询中,非聚合列使用什么值?

c# - 即使分配了 null,sql 也不会返回值