» »

[SQL] - združitev glede na iste vrednosti

[SQL] - združitev glede na iste vrednosti

tx-z ::

Recimo da imam sledečo tabelo (V resnici je to že rezultat neke poizvedbe...ampak mislm da to ni pomembno):
+-----+-----+--------------+
| ID1 | ID2 | Name         |
+-----+-----+--------------+
|  10 |  11 | Assignment 8 |
|  10 |  11 | Assignment 9 |
|  10 |  21 | Assignment 8 |
|  10 |  22 | Assignment 8 |
|  12 |  13 | Assignment 8 |
|  12 |  13 | Assignment 9 |
+-----+-----+--------------+


Kakšen bi bil SQL stavek, da bi dobil sledeč rezultat:
+-----+-----+----------------------------+
| ID1 | ID2 | Name                       |
+-----+-----+----------------------------+
|  10 |  11 | Assignment 8, Assignment 9 |
|  10 |  21 | Assignment 8               |
|  10 |  22 | Assignment 8               |
|  12 |  13 | Assignment 8, Assignment 9 |
+-----+-----+----------------------------+


Hvala za odgovor!

edit: Teh različnih Assignment je različno število; v tem primeru sta samo 2 ista da ni preveč podatkov..
tx-z
  • spremenilo: tx-z ()

tomi_m ::

Ta bo težka. Tudi mene zanima, če to kdo reši - ob predpostavki da je št. zapisov "Assignment X" neomejeno oz. poljubno.

Looooooka ::

v MSSQL nekaj takega:
SELECT ID,ID2,
SUBSTRING(
(
SELECT ( ', ' + Name)
FROM ImeTvojeTabele t2 WHERE t1.ID=t2.ID AND t1.ID2=t2.ID2 ORDER BY ID,ID2 FOR XML PATH('')
), 3, 1000) FROM ImeTvojeTabele t1 GROUP BY ID,ID2

Looooooka ::

oz tale order by je nepotreben...

SELECT ID,ID2,
SUBSTRING(
(
SELECT ( ', ' + Name)
FROM ImeTvojeTabele t2 WHERE t1.ID=t2.ID AND t1.ID2=t2.ID2 FOR XML PATH('')
), 3, 1000) FROM ImeTvojeTabele t1 GROUP BY ID,ID2

hellboy123 ::

SELECT ID1, ID2, group_concat(`Name` separator ', ') AS `Column`
FROM tbl
GROUP BY ID1, ID2;


http://sqlfiddle.com/#!2/7150e/5

tx-z ::

hellboy123, supr! Točno to sm rabu! Hvala! ;)
Looooooka, tut teb hvala ampak se mi zdi rešitev od hellboy123 bolj enostavna :)
tx-z

Zgodovina sprememb…

  • spremenilo: tx-z ()

tomi_m ::

@Hellboy - odlično.
je pa "MySQL specific", Oracle ima WM_CONCAT.
Ali Ansi standard SQL pozna podobno funkcijo?

hellboy123 ::

Mhm, če vsaka verzija SQL-a uporablja svojo fukcijo, potem skoraj dvomim. Kaj takega, če se potem prilagodi/uporabi.

Looooooka ::

Moja na mysqlu sploh ne bo delovala :)
hellboyeva pa ne na mssqlu....razen ce gres pisat svojo sql funkcijo. Ampak ne vem zakaj bi se sel streljat v nogo :P
Vazno, da ti dela.

tx-z ::

Sedaj imam pa sledeč problem. Recimo da ima vsaka kombinacija ID1 in ID2 nek svoj ValueA in ValueB (vedo samo dva...kombinacij ID1 in ID2 je pa lahko n enakih)

+-----+-----+--------+--------+
| ID1 | ID2 | ValueA | ValueB |
+-----+-----+--------+--------+
|  10 |  11 |     10 |     30 |
|  10 |  11 |     20 |     50 |
|  10 |  21 |     20 |     20 |
|  10 |  22 |     30 |     40 |
|  12 |  13 |     50 |     50 |
|  12 |  13 |     70 |     60 |
+-----+-----+--------+--------+


Podobno kot zgoraj, bi rabil združiti vrednost. Sedaj ni to nek string, da ga z vejico dam skp, ampak je številka, katere povprečje bi rad imel kot rezultat. Recimo ID 10,11 imata vrednosti A 10 in 20, kar da 15....pri B pa 30 in 50, kar da 40.
+-----+-----+-------+--------+
| ID1 | ID2 | ValueA | ValueB |
+-----+-----+--------+--------+
|  10 |  11 |     15 |     40 |
|  10 |  21 |     20 |     20 |
|  10 |  22 |     30 |     40 |
|  12 |  13 |     50 |     55 |
+-----+-----+--------+--------+


V tehle težjih SQL stavkih sm kr zakrnel :S A se da tole tut še s sql rešt al bo treba drgač?
tx-z

Zgodovina sprememb…

  • spremenilo: tx-z ()

JanezH ::

V oracle se da tole rešit z analiskimi funkcijami. Nad stolpcema id1 in id2 izvajas particije, A in B pa racunas ločeno za vsako particijo.

Zgodovina sprememb…

  • spremenil: JanezH ()

hellboy123 ::

darkkk ::

A maš pri rezultatu napako v zadnji vrsti v stolpcu A?

Če ni napake, pol ne razumem čisto dobro kaj bi rad, če pa maš napako pa tko:
SELECT DISTINCT id1, id2, (AVG(A) OVER (PARTITION BY ID1,ID2)), (AVG(B) OVER (PARTITION BY ID1,ID2)) FROM ...

(in ja, za delovanje oz. razumevanje poženi tudi brez distincta)

tx-z ::

hellboy123, najlepša ti hvala! ;)

darkkk...Tvoje mi pa ni delal.
Prav da sintaksa ni prava zravn "OVER (PARTITION BY....)" ...pa sm natančn pogledu da sm prou napisu ampak ni :)

edit: ja, napaka je v unmu stolpcu...sm ročno pisu za primer pa sm spregledu.
tx-z

Zgodovina sprememb…

  • spremenilo: tx-z ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[SQL] Pohitritev izpisa

Oddelek: Programiranje
252601 (1500) kuall
»

SQL vprašanje

Oddelek: Programiranje
81038 (637) MrStein
»

Normalizirana struktura - query

Oddelek: Programiranje
191633 (1253) frudi
»

MYSQL vprašanje

Oddelek: Programiranje
131656 (1271) MrBrdo
»

[SQL] - unique id-ji iz seznama, ki jih ni v tabeli?

Oddelek: Programiranje
9940 (868) krho

Več podobnih tem