Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 7
  • 431

Jak zamienić krzyżowe SQL (Transform Pivot) na proste Select from w kolumnach np. miesiące?

Access oferuje składnię Transform Pivot. Czy można tę składnię łatwo przerobić na standardowy SQL, który nie oferuje takiej możliwości?

Na przykład, jak przedstawić w klasycznym SQL taką prostą składnię:

Zadaniem tego zapytania jest stworzenie kalendarza, który przedstawiłby -  na podstawie kolumny czasu trwania w miesiącach i daty rozpoczęcia umowy - kiedy umowy się kończą:

TRANSFORM Count([Value])
           SELECT [NIP], First ([Nazwa_inwestora ]) AS [Klient], First([Miasto Inwestora]) AS [Town]
           FROM [Data$]
           WHERE [NIP] IS NOT NULL AND [Del] IS NULL AND year(DateAdd('m',[Dur_mths], [Start_Date]))= " & Range("c3").Value & "
           GROUP BY [NIP]

PIVOT Format(DateAdd('m',[Dur_mths], DateSerial(year([Start_Date]),month([Start_Date]),1)),'mm')

 

TRANSFORM Count([Value])
           SELECT [NIP], First ([Nazwa_inwestora ]) AS [Klient], First([Miasto Inwestora]) AS [Town] "
           FROM [Data$] 
           WHERE [NIP] IS NOT NULL AND [Del] IS NULL AND year(DateAdd('m',[Dur_mths], [Start_Date]))= " & Range("c3").Value & " "
             "GROUP BY [NIP]

PIVOT Format(DateAdd('m',[Dur_mths], DateSerial(year([Start_Date]),month([Start_Date]),1)),'mm') "

W skrócie: Jakby takie zapytanie (tworzące z kolumny zawierającej daty np. podpisania umów, szereg kolumn ze zliczonymi wystąpieniami dat w określonych miesiącach) wyglądało w klasycznym SQL-u?

Jacek_Kotowski
  • Zapytał
  • @ Jacek_Kotowski | 05.09.2014
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 1

Tu trzeba by połączyć dwa elementy:

Polecenie PIVOT ze składni SELECT oraz Dynamic SQL, bo sam PIVOT nie daje możliwości wygenerowania dynamicznej listy kolumn (trzeba je statycznie zadeklarować).

Proszę podać, jak wyglądają dane źródłowe (lista kolumn i co zawierają), wtedy mogę przygotować przykładowe rozwiązanie.

  • Odpowiedział
  • @ | 17.09.2014
  • TRENER ALTKOM AKADEMII