2010-04-26 11 views
5

Naprawdę chciałbym utworzyć widok.Używanie tabeli tymczasowej w widoku

Wiem, że nie można używać tabel tymczasowych w widokach MSSQL2005. Bez przepisywania sql, czy jest coś oczywistego, co przegapiłem?

Plan tworzenia kopii zapasowych polega na użyciu zapisanego procesu.

Cheers

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 
+1

Jestem całkiem pewien, że można spaść pierwszy ZAMÓWIENIE PRZEZ ... –

Odpowiedz

3

Hav próbowałeś przepisanie to bez użycia tabel tymczasowych?

Coś

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 
+0

niesamowite dzięki .. –

0

Użyj oświadczenie WITH.

7

Można użyć CTE:

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 

(może trzeba zmienić dołączyć do prawej, ale masz pomysł ...)

+0

bardzo interesujące ... zajmie się tym też ... przechytrzyć Cię o kilka minut :-) –

Powiązane problemy