【发布时间】: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