繁体   English   中英

在视图中使用临时表的替代方法

[英]Alternative to using temp tables in a view

下午,对新手问题表示歉意,但是我已经使用临时表编写了以下SQL代码,并且我想将其用作视图,我敢肯定,可以在不使用临时表的情况下编写它,但是如果有人可以帮助我并指出我对我需要做的事情的正确方向,将不胜感激。 SQL Server 2008 R2

select R.Code, R.Name, R.[Department Code], R.[Line Role]
into #first
from [Employment Role] R

select R.Code, R.Name, R.[Department Code], R.[Line Role]
into #second
from [Employment Role] R

select R.Code, R.Name, R.[Department Code], R.[Line Role]
into #senior
from [Employment Role] R

select emp.[First Name], emp.[Last Name], f.Name AS [Employee Job Title], f.[Department Code] as [Employee Department], 
       s.Name as [Manager Job Title], s.[Department Code] as [Manager Department], snr.Name as [Senior Manager Job Title], 
       snr.[Department Code] as [Senior Manager Department]
from #first f
join #second s on f.[Line Role] = s.Code
join #senior snr on s.[Line Role] = snr.Code
join [Employee] Emp on Emp.[Role Name] = f.Name

drop table #first
drop table #second
drop table #senior

看起来仅使用别名即可使用,而无需使用CTE。

select emp.[First Name], emp.[Last Name], f.Name AS [Employee Job Title],
 f.[Department Code] as [Employee Department],
 s.Name as [Manager Job Title],
 s.[Department Code] as   [Manager Department],
 snr.Name as [Senior Manager Job Title],
 snr.[Department Code] as [Senior Manager Department]
from [Employment Role] f
join [Employment Role] s on f.[Line Role] = s.Code
join [Employment Role] snr on s.[Line Role] = snr.Code
join [Employee] Emp on Emp.[Role Name] = f.Name
WITH first_CTE (Code, Name, [Department Code], [Line Role])
AS
(
    select R.Code, R.Name, R.[Department Code], R.[Line Role]
      from [Employment Role] R
), second_CTE (Code, Name, [Department Code], [Line Role])
AS
(
    select R.Code, R.Name, R.[Department Code], R.[Line Role]
      from [Employment Role] R
)

select *
  from first_CTE join second_CTE ...

看起来您的临时表都具有相同的数据,因此您只需使用一个cte并将其连接到自身即可:

WITH    cte
          AS ( SELECT   R.Code ,
                        R.Name ,
                        R.[Department Code] ,
                        R.[Line Role]
               FROM     [Employment Role] R
             )
    SELECT  emp.[First Name] ,
            emp.[Last Name] ,
            f.Name AS [Employee Job Title] ,
            f.[Department          Code] AS [Employee Department] ,
            s.Name AS [Manager Job Title] ,
            s.[Department Code] AS [Manager Department] ,
            snr.Name AS [Senior Manager Job Title] ,
            snr.[Department Code] AS [Senior Manager Department]
    FROM    cte f
            INNER JOIN cte s ON f.[Line Role] = s.Code
            INNER JOIN cte snr ON s.[Line Role] = snr.Code
            INNER JOIN [Employee] Emp ON Emp.[Role Name] = f.Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM