[Mysql] Horizontal to vertical

0

Hej!
Krótka piła. Mam taki result

mysql> select * from test where id_rekordu=1;
+------------+----------+----------+---------------------+
| id_rekordu | wartosc1 | wartosc2 | data_insert |
+------------+----------+----------+---------------------+
| 1 | a | b | 2010-07-27 00:05:40 |
+------------+----------+----------+---------------------+

I teraz chciałbym coś w stylu (to sie chyba jakoś fachowo nawet nazywa)

| key | value |
| wartosc1 | a |
| wartosc2 | b |
| data_insert | 2010-07-27 00:05:40 |

Ktoś ma jakiś pomysł jak można to w miare sensownie rozwiązać ? (o ile w ogóle się da)
pozdrawiam

0

to sie nazywa pivot
ale nie wiem czy MySql ma jakies funkcje to wspierajace
ale w tym przypadku powinno byc latwo, rozumiem ze masz skonczona liczbe tych kolumn, ktore maja stac sie key
wiec:

select 'wartosc1' as key, wartosc1 as value from test where id_rekordu = 1
union all
select 'wartosc2' as key, wartosc2 as value from test where id_rekordu = 1
union all
select 'data_insert' as key, insert as value from test where id_rekordu = 1
...
0

No właśnie UNION mi średnio podchodzi. Chciałbym aby w momencie dodania, nowej kolumny do tabeli, zapytanie je automatycznie uwzględniało.

Może przybliżę dokładniej o co mi chodzi:

Mam dwa zapytania które zwracają powiedzmy cechy jakieś osoby:
Pierwsze zapytanie zwraca dane w postaci :

+------------+----------+----------+---------------------+
| id_rekordu | wartosc1 | wartosc2 | data_insert |
+------------+----------+----------+---------------------+
| 1 | a | b | 2010-07-27 00:05:40 |
+------------+----------+----------+---------------------+

Natomiast drugie :

+---------------+-----------------+---------+
| id_rekordu | nazwa           | wartosc |
+---------------+-----------------+---------+
|             1 | numer_buta      | 32      |
|             1 | numer_kolnierzy | 12      |
+---------------+-----------------+---------+

Najwygodniej byłoby pierwsze przekształcić w format drugiego i
połączyć oba unionem.

+---------------+-----------------+---------+
| id_rekordu | nazwa           | wartosc |
+---------------+-----------------+---------+
|             1 | wartosc2        | b       |
|             1 | wartosc1        | a       |
|             1 | numer_buta      | 32      |
|             1 | numer_kolnierzy | 12      |
+---------------+-----------------+---------+

Z przekształceniem drugiego w format pierwszego nie ma dużego
problemu (pivot),ale też nie jest do końca najwygodniejsze. Generalnie potrzebowałbym czegoś w stylu 'group by column_name'. Da się to skleić jakoś w mysql czy raczej niewykonalne ? ;)

0

potrzebujesz w takim razie zbudowac zapytanie dynamiczne, z odpowiednich tabel systemowych dla tej tabeli wybrac nazwy kolumn i skleic query i je wykonac, jej wynik dodac do drugiego zapytania

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