首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在视图中使用临时表

在视图中使用临时表
EN

Stack Overflow用户
提问于 2010-04-26 11:45:13
回答 3查看 16.6K关注 0票数 5

我真的很想创建一个视图。

我知道你不能在MSSQL2005视图中使用临时表。在不重写sql的情况下,有没有什么明显的遗漏?

后备计划是使用存储的进程。

干杯

代码语言:javascript
复制
select * into #temp from vwIncidents 

SELECT     vwIncidents.incidentcode, employeecode, EMPOS.POS_L4_CDA as areaAtTimeOfIncident
into #temp1
FROM         vwIncidents 
INNER JOIN EMPOS ON vwIncidents.employeecode = EMPOS.DET_NUMBERA 
WHERE    EMPOS.POS_STARTC <  vwIncidents.incidentdate
AND      (EMPOS.POS_ENDD > vwIncidents.incidentdate OR EMPOS.POS_ENDD IS NULL)
order by incidentcode

select #temp.*, #temp1.areaAtTimeOfIncident from #temp
left outer join #temp1 on #temp.incidentcode = #temp1.incidentcode 
and #temp.employeecode = #temp1.employeecode
order by incidentcode
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-26 11:50:15

你有没有试过在不使用临时表的情况下重写?

就像这样

代码语言:javascript
复制
select  temp.*, 
        temp1.areaAtTimeOfIncident 
from    (
            select * 
            from vwIncidents
        ) temp  left outer join 
        (
            SELECT  vwIncidents.incidentcode, 
                    employeecode, 
                    EMPOS.POS_L4_CDA as areaAtTimeOfIncident 
            FROM    vwIncidents  INNER JOIN 
                    EMPOS   ON vwIncidents.employeecode = EMPOS.DET_NUMBERA  
            WHERE   EMPOS.POS_STARTC <  vwIncidents.incidentdate 
            AND     (   
                        EMPOS.POS_ENDD > vwIncidents.incidentdate 
                        OR EMPOS.POS_ENDD IS NULL
                    )
        ) temp1     on  temp.incidentcode = temp1.incidentcode  
                and temp.employeecode = temp1.employeecode 
order by incidentcode 
票数 3
EN

Stack Overflow用户

发布于 2010-04-26 11:54:24

您可以使用CTE:

代码语言:javascript
复制
WITH cteIncidents (incidentcode, employeecode, areaAtTimeOfIncident)
AS
(
SELECT 
    vwIncidents.incidentcode, employeecode, EMPOS.POS_L4_CDA as areaAtTimeOfIncident 
FROM
    vwIncidents  
INNER JOIN EMPOS ON vwIncidents.employeecode = EMPOS.DET_NUMBERA  
WHERE    EMPOS.POS_STARTC <  vwIncidents.incidentdate 
AND      (EMPOS.POS_ENDD > vwIncidents.incidentdate OR EMPOS.POS_ENDD IS NULL) 
)

SELECT 
    incidentcode, employeecode, areaAtTimeOfIncident
FROM 
    cteIncidents 
left outer join vwIncidents on vwIncidents.incidentcode = cteIncidents.incidentcode  
and vwIncidents.employeecode = cteIncidents.employeecode 
ORDER BY
    incidentcode 

(可能需要将连接更改为右连接,但您明白了……)

票数 7
EN

Stack Overflow用户

发布于 2010-04-26 11:50:26

使用WITH语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2711040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档