2015-10-29 9 views
0

У меня есть следующий запрос доступа, который должен превратился в SQL -SQL Pivot из Pivot Access запрос

TRANSFORM 
Sum([anaes_downtime]![ANAESENDTIME]-[anaes_downtime]![anaesstarttime])/24/60 AS Expr1 

SELECT downtime_seq.THEATRE, downtime_seq.OPSESSION, downtime_seq.OPDATE 
FROM ANAES_Downtime 
INNER JOIN downtime_seq ON ANAES_Downtime.opnumber = downtime_seq.opnumber 
WHERE (((ANAES_Downtime.ANAESSTARTTIME) <> 0) 
    AND ((ANAES_Downtime.ANAESENDTIME) <> 0)) 
GROUP BY downtime_seq.THEATRE, downtime_seq.OPSESSION, downtime_seq.OPDATE 
PIVOT "d" & [opseq] IN ("d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","d10","d11","d12","d13","d14","d15","d16","d17","d18","d19","d20"); 

Я понимаю основы SQL поворота, но был не в состоянии преобразовать это успешно. Любая помощь?

+0

Какую версию SQL Server вы используете? – Morpheus

+0

Вот отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

Этот [SO ответ] (http://stackoverflow.com/a/1768830/3854195) может помочь вам начать работу. – Morpheus

ответ

0

Я нашел ответ на мой вопрос, используя саз -

SELECT ad.THEATRE, ad.OPSESSION, ad.OPDATE, 
    SUM(CASE WHEN opseq = 0 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd0', 
    SUM(CASE WHEN opseq = 1 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd1', 
    SUM(CASE WHEN opseq = 2 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd2', 
    SUM(CASE WHEN opseq = 3 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd3', 
    SUM(CASE WHEN opseq = 4 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd4', 
    SUM(CASE WHEN opseq = 5 
     THEN ad.ANAESENDTIME - ad.anaesstarttime ELSE 0 END) AS 'd5'...  

...FROM #ANAES_Downtime ad INNER JOIN #DowntimeSeq ds ON ad.opnumber = ds.opnumber 

WHERE ad.ANAESSTARTTIME <> 0 AND ad.ANAESENDTIME <> 0 
GROUP BY ad.THEATRE, ad.OPSESSION, ad.OPDATE 
ORDER BY ad.THEATRE, ad.OPSESSION, ad.OPDATE