【问题标题】:SQL Server 2008 R2 dynamic column name usageSQL Server 2008 R2 动态列名用法
【发布时间】:2017-04-30 17:47:41
【问题描述】:

我有一张桌子,比如说:

CREATE TABLE dbo.test
(dummyid numeric(10,0) null,
    on_date datetime      null,
    salary1 numeric(10,2) null,
    salary2 numeric(10,2) null,
    salary3 numeric(10,2) null,
    salary4 numeric(10,2) null,
    salary5 numeric(10,2) null,
    salary6 numeric(10,2) null,
    salary7 numeric(10,2) null,
    salary8 numeric(10,2) null,
    salary9 numeric(10,2) null)

我有一个程序,经过大量处理后,它会产生一个日期和一个从 1 到 9 的数字。

如果为该日期选择了 1,我想返回薪水 1,如果选择了 2,我想返回薪水 2 等等。

我想避免使用 8 个 if else 子句:

IF @number = 1
    BEGIN
    SELECT @salary = salary1
    FROM test
       WHERE on_date = @on_date

blah 

blah

我想知道是否有一种优雅的方法可以根据程序编号结果获取 corect SalaryX 字段。

谢谢大家!!

【问题讨论】:

  • 使用case 条件而不是
  • SQL Server 2012 你可以使用CHOOSE (msdn.microsoft.com/en-us/library/hh213019.aspx)
  • 用数字命名列(如salary1,salary2)是 - 在几乎所有情况下! - 结构不良的非常明显的迹象。这需要一张1:n 相关的边桌......

标签: sql sql-server select sql-server-2008-r2


【解决方案1】:

无需动态代码

select      case @numebr
                when 1 then salary1   
                when 2 then salary2
                when 3 then salary3
                when 4 then salary4
                when 5 then salary5
                when 6 then salary6
                when 7 then salary7
                when 8 then salary8
                when 9 then salary9
            end                         as salary

from        dbo.test

where       on_date = @date
;

【讨论】:

    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多