case when 结合 foreach
时间: 2023-06-30 12:17:25 浏览: 91
在SQL中没有直接的FOREACH循环,但可以使用CURSOR或循环表达式等工具来模拟FOREACH循环。以下是一个示例,演示如何在CASE WHEN语句中结合循环实现动态列名:
```
DECLARE @columns AS TABLE (columnName NVARCHAR(50))
INSERT INTO @columns VALUES ('column1'), ('column2'), ('column3')
DECLARE @value AS INT = 5
DECLARE @sql AS NVARCHAR(MAX) = ''
SELECT @sql = @sql + 'SELECT ''' + columnName + ''' AS ColumnName,
CASE
WHEN ' + QUOTENAME(columnName) + ' > ' + CAST(@value AS NVARCHAR(10)) + ' THEN ''Greater than value''
WHEN ' + QUOTENAME(columnName) + ' < ' + CAST(@value AS NVARCHAR(10)) + ' THEN ''Less than value''
ELSE ''Equal to value''
END AS Result
FROM myTable UNION ALL '
FROM @columns
SET @sql = LEFT(@sql, LEN(@sql) - 11) -- 移除最后一个UNION ALL
EXEC(@sql)
```
在这个示例中,我们首先使用一个临时表 @columns 来存储列名。然后在循环中,将每个列名添加到 SQL 语句中,并使用 QUOTENAME 函数引用列名。最后通过 EXEC 函数执行 SQL 语句,返回每个列的结果。这样就可以根据列名动态生成 CASE WHEN 语句。
阅读全文