Rozdzielenie kolumn z tabeli

Rozdzielenie kolumn z tabeli
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

Panowie i Panie taka sytuacja :)

id | data od | data do | typ | rozmiar|
---------------- | -------------------
1 | 2010-01-01 | 2012-01-01 00:00:00.000 | 15 | 12
1 | 2010-01-01 | 2012-01-01 00:00:00.000 | 15 | 15
1 | 2010-01-01 | 2012-01-01 00:00:00.000 | 16 | 18
1 | 2010-01-01 | 2012-01-01 00:00:00.000| 17 | 25
2 | 2010-01-01 | 2012-01-01 00:00:00.000 | 15 | 23
2 | 2010-01-01 | 2012-01-01 00:00:00.000 | 16 | 12
2 | 2010-01-01 | 2012-01-01 00:00:00.000 | 17 | 15
3 | 2010-01-01 | 2012-01-01 00:00:00.000 | 15 | 16
3 | 2010-01-01 | 2012-01-01 00:00:00.000 | 16 | 18

A dążymy do tego:

id data od data do typ15 typ16 typ17
1 2010-01-01 2012-01-01 12
1 2010-01-01 2012-01-01 15
1 2010-01-01 2012-01-01 18
1 2010-01-01 2012-01-01 25
2 2010-01-01 2012-01-01 23
2 2010-01-01 2012-01-01 12
2 2010-01-01 2012-01-01 15
3 2010-01-01 2012-01-01
3 2010-01-01 2012-01-01 16
3 2010-01-01 2012-01-01 18

No mi już spędza sen z powiek, w excelu spoko ogarniam ale w SQL???

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3297
0

Nie bardzo się to da zrobić dobrze - SQL wymaga, żebyś na etapie tworzenia zapytania zdefiniował wszystkie kolumny wynikowe. Jakoś tam pójdzie cos takiego:
select id, dod, ddo,
case typ when 15 then rozmiar else 0 end case as typ15,
case typ when 16 then rozmiar else 0 as end case typ16,
....

from my_table

Trzeba się odwołać do dokumentacji serwera, bo bywa różnie

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

No właśnie tak myślałem. Rozbije to w Excelu i przerzucę gotowca do bazy , tak będzie najszybciej:)

piotrpo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3297
0

to co robiłem w takich sytuacjach to mały cheet :)

Kopiuj
select distinct typ, "case typ when "+ typ +" then rozmiar else 0 end case as typ"+typ

wynik kopiujesz i wklejasz jako część zapytania

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
Piotr Potulski napisał(a):

to co robiłem w takich sytuacjach to mały cheet :)

Kopiuj
select distinct typ, "case typ when "+ typ +" then rozmiar else 0 end case as typ"+typ

wynik kopiujesz i wklejasz jako część zapytania

Nie rozumiem tego Cheeta :)

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

PIVOT

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

Myślałem na PIVOT ale ni jak nie mogę go dopasować. Zrobiłem tak jak kolega wcześniej pisał, 3 zapytania dla każdej grupy połączone w jedno i jest oka ale warunek, prenumerowanie unikatowym ID dla tabeli.

Haskell
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4700
3
Kopiuj
SELECT id, data_od, data_do
	, CASE WHEN typ = 15 THEN rozmiar END AS [15]
	, CASE WHEN typ = 16 THEN rozmiar END AS [16]
	, CASE WHEN typ = 17 THEN rozmiar END AS [17]
FROM tabela

albo

Kopiuj
SELECT id, data_od, data_do, [15], [16], [17]
FROM
(
	SELECT id, data_od, data_do, typ, rozmiar
	FROM tabela
) AS SourceTab
PIVOT
(
	AVG(rozmiar)
	FOR typ IN ([15], [16], [17])
) AS PivotTab;
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
Kopiuj
SELECT id, data_od, data_do
    , CASE WHEN typ = 15 THEN rozmiar END AS [15]
    , CASE WHEN typ = 16 THEN rozmiar END AS [16]
    , CASE WHEN typ = 17 THEN rozmiar END AS [17]
FROM tabela

rozwiązanie jak najbardziej robi to co założyłem. Na przyszłość dla potomnych zapamiętać zapisać :)
Brawo Wy :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.