SQL中使用IF-ELIF-ELSE条件计算的列

时间:2015-06-01 10:47:56

标签: sql sql-server if-statement calculated-columns

我需要有关如何在SQL代码中计算此计算列的帮助。我之前在论坛上看到过如何基于将列添加到一起来计算,或者只是给出一个标准值。但在我的情况下,我想添加一个列,可以根据另一列的值显示不同的预设值。它就像一个普通的IF-ELIF-ELSE语句。

就我而言,我有一个数据库,一个表,用于记录用户在系统中执行的每个更改。无论何时进行更改,用户员工编号都会记录到表中,而不是员工的姓名。由于我们花了很多时间回到这些日志,我们花了很多时间查找哪个雇主号码属于谁。我希望这可以直接在查询中完成。我有一份所有员工编号及其相应名称的清单。

我的基本SQL技能只告诉我如何导入表/列并创建一个,但是使用IF语句我完全迷失了,下面我已经执行了一些伪代码,所以你可能会理解我在寻找什么。 A.Emp_Num是包含员工编号的列,Emp_Name是创建的列,其中' null'作为内容。

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, 'Null' AS EMP_NAME

FROM LOGGINGTABLE A

IF A.EMP_NUM=='1234' THEN EMP_NAME='MONICA'

ELIF A.EMP_NUM=='5678' THEN EMP_NAME='JOE'

2 个答案:

答案 0 :(得分:1)

尝试以下内容

注意:将来维护EMP_NAME与EMP_NUM之间的关系将非常有用。 如果员工数量更多,那么我们就不能像下面那样对这些值进行硬编码,以保持它们之间的关系

SELECT CAST(
             CASE 
                  WHEN EMP_NUM =1234 
                     THEN 'MONICA' 
                  WHEN  EMP_NUM =5678
                  then 'JOE' 
                  .
                  .
                  .
             END AS nvarchar(1000)) as EMPNAME,EMP_NUM, COLUMN1, COLUMN2
FROM LOGGINGTABLE 

OR

SELECT 
             CASE 
                  WHEN EMP_NUM =1234 
                     THEN 'MONICA' 
                  WHEN  EMP_NUM =5678
                  then 'JOE' 
                  .
                  .
                  .
              END as EMPNAME,EMP_NUM, COLUMN1, COLUMN2
FROM LOGGINGTABL

建议:我建议您在表中添加一个名为EMP_NAME的新列,然后将这些值保存在该列中,将来当您插入EMP_NUM时,插入EMP_NAME也会很容易维护

答案 1 :(得分:0)

OMG,你有员工表吗?加入吧

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, E.EMP_NAME
FROM LOGGINGTABLE A
INNER JOIN EMPLOYEETABLE E on A.EMP_NUM = E.EMP_NUM

编辑:如果您的条目未映射到用户且您不想错过它们

SELECT A.EMP_NUM, A.COLUMN1, A.COLUMN2, isnull(E.EMP_NAME,'No User Linked') as EMP_NAME
FROM LOGGINGTABLE A
LEFT OUTER JOIN EMPLOYEETABLE E on A.EMP_NUM = E.EMP_NUM

编辑:如果您希望在表格

中获得文本记录的员工
BULK INSERT dbo.temp 
FROM 'c:\temp\file.txt'
WITH 
  (
     ROWTERMINATOR ='\n'
  )

然后

Insert into EMPLOYEETABLE
select LEFT(column1, CHARINDEX(' ', column1+ ' ') - 1),
RIGHT(column1, len(column1)-CHARINDEX(' ', column1+ ' ') - 1)
from dbo.temp

你可能需要修改它,让我知道这样做有什么困难。