如何为case语句中的列值选择同一表中另一列的结果

时间:2015-08-20 08:58:41

标签: sql-server function tsql stored-procedures

这是一个非常简化的陈述愿景

SELECT  
    ChangeId,
    ColumnName,
    BeforeChange,
    CASE ColumnName 
       WHEN 'x' THEN AfterChange ELSE 'dbo.function(Y)' 
    END AS AfterChange,
    AfterChangeUpdateId,
    UpdatedBy,
    ChangeDate,
    ChangeType
FROM 
    [DEV].[dbo].[tblperson_Audit]

不确定这是否可行,但我想将ColumnName值传递给CASE声明,以显示不同的结果,具体取决于每一行的值。

该函数传递一个整数值。

任何帮助都会非常感谢

2 个答案:

答案 0 :(得分:0)

你能试试吗?假设函数返回单个值

SELECT  ChangeId,
ColumnName,
BeforeChange,
CASE ColumnName WHEN 'x' THEN AfterChange ELSE dbo.function(ColumnName) END AS AfterChange,
AfterChangeUpdateId,
UpdatedBy,
ChangeDate,
ChangeType
FROM [DEV].[dbo].[tblperson_Audit]

答案 1 :(得分:0)

Madhivanan解决方案中的轻微语法错误。它应该是:

case when condition() then column1 else column2 end as columnname

所以在你的例子中:

CASE WHEN 'x' THEN AfterChange ELSE 'dbo.function(Y)' as AfterChange

SQL Server的条件语法似乎总是如此反直觉和奇怪我每次都要谷歌...