我将提出一个关于'别名的问题'列中的值。我将使用一周中的几天作为直观示例来解决我的问题,但我 不 要求进行日期转换。
假设我有以下SQL脚本:
SELECT DaysOfWeek
FROM [databasename].[dbo].[tablename]
现在,列DaysOfWeek
将返回日期的字符串值'姓名,即"星期一," "星期二,"等等。
如果我希望查询返回'星期一',2'星期二'等等的整数1,该怎么办?我想在SELECT
语句中为每周的每一天分配一个特定值,但我不确定如何去做。
我对SQL比较陌生,所以我只是想要一个直观的方法来执行这样的任务。
编辑添加:我只使用一周中的几天及其各自的整数表示作为简单示例;我的任务不涉及一周中的几天,而是员工代码编号和相应的标题。
答案 0 :(得分:1)
如果要为另一个值定义自己的对应值,最好的方法是使用表,然后加入该表。
例如:
create table dbo.EmployeeTitle (
id int not null identity(1,1) primary key
, title varchar(32)
);
create table dbo.Employee (
id int not null identity(1,1) primary key
, name nvarchar(128)
, title_id int references dbo.EmployeeTitle(id)
);
insert into dbo.EmployeeTitle values ('Big boss');
insert into dbo.Employee values ('daOnlyBG',1);
select e.*, et.title
from dbo.Employee e
inner join dbo.EmployeeTitle et
on e.title_id = et.id
rextester演示:http://rextester.com/FXIM78632
返回:
+----+----------+----------+----------+
| id | name | title_id | title |
+----+----------+----------+----------+
| 1 | daOnlyBG | 1 | Big boss |
+----+----------+----------+----------+
答案 1 :(得分:1)
您可以使用case
:
SELECT (CASE DaysOfWeek
WHEN 'Monday' THEN 1
WHEN 'Tuesday' THEN 2
. . .
END)
在大多数情况下,没有必要像这样存储星期几。您可以随时使用函数datepart()
或datename()
从日期/时间值中提取星期几。
如果列在表中,而不是日期的一部分,那么您可能希望将上述逻辑包含为计算列:
alter table t add DayOfWeekNumber as (case DaysOfWeek when 'Monday' then 1 . . .);
答案 2 :(得分:1)
使用CASE,here您有定义和一个示例:
select
CASE
WHEN(DaysOfWeek="Monday") THEN 1
WHEN(DaysOfWeek="Thusday") THEN 2
....
ELSE -1
from table
希望这有帮助!
答案 3 :(得分:0)
我能想到的最简单的方法是拥有一个表变量或CTE;将查找创建为行并加入其中。像这样:
with cte as (
select 1 as emp_code, 'value1' as emp_title
union
select 2 as emp_code, 'value2' as emp_title
union
select 3 as emp_code, 'value3' as emp_title
)
select cte.emp_code, tableName.*
from tableName
inner join cte
on cte.emp_title = tableName.some_column