Forum » Programiranje » [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):
Kakšen bi bil SQL stavek, da bi dobil sledeč rezultat:
Hvala za odgovor!
edit: Teh različnih Assignment je različno število; v tem primeru sta samo 2 ista da ni preveč podatkov..
+-----+-----+--------------+ | 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
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
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 :)
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?
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.
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)
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.
V tehle težjih SQL stavkih sm kr zakrnel :S A se da tole tut še s sql rešt al bo treba drgač?
+-----+-----+--------+--------+ | 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 ()
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)
Č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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [SQL] Pohitritev izpisaOddelek: Programiranje | 2959 (1858) | kuall |
» | SQL vprašanjeOddelek: Programiranje | 1116 (715) | MrStein |
» | Normalizirana struktura - queryOddelek: Programiranje | 1732 (1352) | frudi |
» | MYSQL vprašanjeOddelek: Programiranje | 1805 (1420) | MrBrdo |
» | [SQL] - unique id-ji iz seznama, ki jih ni v tabeli?Oddelek: Programiranje | 1022 (950) | krho |