[英]How do I alias particular values in SQL?
我將在列中提出有關“別名”值的問題。 我將以一周中的幾天作為一個直觀的例子來闡明我的問題,但我不是在要求日期時間轉換。
假設我有以下SQL腳本:
SELECT DaysOfWeek
FROM [databasename].[dbo].[tablename]
現在, DaysOfWeek
列將返回日期名稱的字符串值,即“ Monday”,“ Tuesday”等。
如果我希望查詢為“星期一”返回整數1,為“星期二”返回整數2,以此類推呢? 我想在SELECT
語句中為一周中的每一天分配一個特定的值,但是我不確定該怎么做。
我對SQL比較陌生,所以我只是想要求一種直觀的方法來執行此類任務。
編輯添加:我僅使用星期幾及其各自的整數表示作為簡單示例; 我的任務不涉及星期幾,而是涉及員工編號和相應的職務。
您可以使用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 . . .);
如果要為另一個值定義自己的對應值,最好的方法是使用一個表並將其聯接。
例如:
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
extrester演示: http ://rextester.com/FXIM78632
返回:
+----+----------+----------+----------+
| id | name | title_id | title |
+----+----------+----------+----------+
| 1 | daOnlyBG | 1 | Big boss |
+----+----------+----------+----------+
使用CASE, 這里有定義和一個示例:
select
CASE
WHEN(DaysOfWeek="Monday") THEN 1
WHEN(DaysOfWeek="Thusday") THEN 2
....
ELSE -1
from table
希望有幫助!
我想到的最簡單的方法是擁有一個表變量或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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.