Rozdzielenie kolumn z tabeli

0

Panowie i Panie taka sytuacja :)

id | data od | data do | typ | rozmiar|
---------------- | -------------------
1 | 2010-01-01 | 2012-01-01 0000.000 | 15 | 12
1 | 2010-01-01 | 2012-01-01 0000.000 | 15 | 15
1 | 2010-01-01 | 2012-01-01 0000.000 | 16 | 18
1 | 2010-01-01 | 2012-01-01 0000.000| 17 | 25
2 | 2010-01-01 | 2012-01-01 0000.000 | 15 | 23
2 | 2010-01-01 | 2012-01-01 0000.000 | 16 | 12
2 | 2010-01-01 | 2012-01-01 0000.000 | 17 | 15
3 | 2010-01-01 | 2012-01-01 0000.000 | 15 | 16
3 | 2010-01-01 | 2012-01-01 0000.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???

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

0

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

0

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

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

wynik kopiujesz i wklejasz jako część zapytania

0
Piotr Potulski napisał(a):

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

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 :)

1

PIVOT

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.

3
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

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;
0
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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1