2010-04-26 5 views
5

Мне бы очень хотелось создать представление.Использование таблицы temp в представлении

Я знаю, вы не можете использовать временные таблицы в представлениях MSSQL2005. Не переписывая sql, есть ли что-то очевидное, что я пропустил?

Резервный план заключается в использовании хранимой процедуры.

Приветствия

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

Я уверен, что вы можете оставить первый ORDER BY ... –

ответ

3

Hav вы пытались переписывать это без использования временных таблиц?

Что-то вроде

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

Огромная благодарность .. –

0

Используйте WITH заявление.

7

Вы можете использовать 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 

(возможно, потребуется изменить присоединиться к праву, но вы получите идею ...)

+0

очень интересно ... будет изучать это тоже ... свидетель избил вас на несколько минут :-) –

Смежные вопросы