sql - 将一个表的行值与另一个表的列值进行比较,如果为真,则说真或假

标签 sql sql-server

我有两个表,我需要将表 1 的行值与表 2 的列名进行比较,如果它们匹配,则需要将表 2 的行值更新为 true 以匹配与行匹配的列名表 1 的值。如果它们不匹配,则应将其更新为 false

非常感谢任何指点。

最佳答案

您可以使用 INFORMATION_SCHEMA View 来获取列名:

CREATE TABLE ##temp (
    column_name nvarchar(max),
    [flag] int
)

INSERT INTO ##temp
SELECT COLUMN_NAME, 0
FROM YourDB.INFORMATION_SCHEMA.COLUMNS  
WHERE TABLE_NAME = 'YOURTableName'

UPDATE t
SET [flag] = CASE WHEN a.ColumnToCheck IS NULL THEN 0 ELSE 1 END
FROM ##temp t
LEFT JOIN anotherTable a
    ON t.column_name = a.ColumnToCheck

然后加入你的表并更新,然后旋转:

DECLARE @columns nvarchar(max), @query nvarchar(max)

SELECT @columns =STUFF((
SELECT ','+column_names FROM ##temp FOR XML PATH('')),1,1,'')

SELECT @query='
SELECT *
FROM ##temp
PIVOT (
    MAX([flag]) for column_name in ('+@columns+'
) as pvt'

EXEC sp_executesql @query

最好使用动态 SQL 自动添加所有列名,而不是手动分配。

关于sql - 将一个表的行值与另一个表的列值进行比较,如果为真,则说真或假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749386/

相关文章:

sql - 如何检查特定表上是否启用了更改跟踪

sql - 按位掩码与 IN() 在 sqlite 中的效率?

sql - 数据库架构设计问题

asp.net - 从 SQL 切换到独立的 Redis

sql-server - Entity Framework 将 SQL Server tinyint 映射到 Int16

sql-server - 检索 SQL 服务器执行的查询

c# - 如何将数据库结果限制为只有一个?

php - 选择具有第一个条件的第三个表[SQL]

mysql - 删除某些字段的重复项

sql-server - 客户端与服务器端数据库事务