【问题标题】:How to select a column value in to a case statement for a result of another column in the same table如何在 case 语句中为同一表中另一列的结果选择列值
【发布时间】:2015-11-13 20:06:51
【问题描述】:

这是一个非常简化的陈述

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 语句,以根据每一行的值显示不同的结果。

函数传递一个整数值。

任何帮助都会非常感谢

【问题讨论】:

  • 谢谢,但没有将列名传递给函数

标签: sql-server function tsql stored-procedures


【解决方案1】:

你可以试试这个吗?假设函数返回单个值

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]

【讨论】:

  • 结果只是每次都运行该函数,我没有将列名传递给函数我从 afterchange 列传递一个整数 ELSE dbo.function(audittablename.afterchange) END
  • 谢谢刚刚得到这个工作不知道我是怎么错过的!
【解决方案2】:

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

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

所以在你的例子中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2022-01-10
    • 2022-11-15
    • 2018-10-28
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多