2010-04-26 9 views
5

मैं वास्तव में एक दृश्य बनाना चाहता हूं।एक दृश्य में एक temp तालिका का उपयोग

मुझे पता है कि आप MSSQL2005 विचारों में temp तालिकाओं का उपयोग नहीं कर सकते हैं। एसक्यूएल को फिर से लिखने के बिना, क्या मुझे कुछ याद आ गया है?

बैकअप योजना संग्रहित प्रो का उपयोग करना है।

चीयर्स

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

मैं बहुत यकीन है कि आप पहले ड्रॉप कर सकते हैं कर रहा हूँ द्वारा आदेश ... –

उत्तर

3

हवलदार आप अस्थायी तालिकाओं के उपयोग के बिना इस पुनर्लेखन की कोशिश की?

कुछ

तरह
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

बहुत रोचक ... इसमें भी देखेंगे ... निर्धारक आपको कुछ मिनटों से हराता है :-) –

संबंधित मुद्दे