过多的Case语句帮助 - SQL Server

时间:2014-10-02 17:46:01

标签: sql case

我应该在课堂上回答这个问题,这对我来说很棘手(对我而言)

编写SELECT查询以输出具有其主管名称的所有员工的姓名。如果员工没有主管,主管姓名栏应包含“没有主管”的文字。

我的数据库中的主键字段是employeeid,它们提供了名称,每个学生也有一个supervisorid

此表格如下所示(对不起布局):

employeeid  lastname  firstname   salary  supervisorid
1           Stolz     Ted         25000   NULL
2           Boswell   Nancy       23000   1
3           Hargett   Vincent     22000   1
4           Weekley   Kevin       22000   3
5           Metts     Geraldine   22000   2
6           McBride   Jeffrey     21000   2
7           Xiong     Jay         20000   3

我想知道如何在不使用案例陈述的情况下将这7个学生应用于以下内容,我可以如何处理这个陈述:

when concat(firstname,' ',lastname)='Nancy Boswell' then 'Ted Stolz'

在较大的表中,这只是一个巨大的陈述,有没有更好的方法呢?

谢谢!

编辑:

我现在试过这个:

  SELECT
         EMP1.employeeid as 'employee',
         EMP2.supervisorid as 'manager'
  FROM
         employee EMP1
  LEFT OUTER JOIN
         employee EMP2
  ON
        emp1.employeeid = emp2.supervisorid;

但是,我看到重复的字段,由于某种原因,员工2和3出现两次,这意味着有9个字段显示而不是7。

另外,我需要显示他们的名字,而不是他们的ID,这是否意味着我需要加入我已经对员工姓名进行的加入?我该怎么做?

感谢您的反馈!

1 个答案:

答案 0 :(得分:2)

您需要根据supervisorId将表与自身链接起来。如果您不熟悉SQL,这可能很奇怪,但它很常见。您告诉SQL使用主键将主管的行添加到员工的行中。

  SELECT
         *
  FROM
         EMPLOYEES EMP1
  LEFT OUTER JOIN
         EMPLOYEES EMP2
  ON     
         -- make link between tables here

请注意,上述查询不是100%正确/完整,这是一个指示。 LEFT OUTER JOIN语句使没有主管的员工对主管有空值,否则整个记录将被遗漏。