Gruppieren und Abfragen nach Wertemenge

tScheckSn

Neuer Benutzer
Beiträge
4
Hallo,
Ich hab wieder einmal ein Problem:
Ausgangspunkt ist eine eine Tabelle, in der verschidene ValueID's einer Wertemenge zugeordnet werden.

Tabelle:

Value (int) | BelongsTo (int)
1 | 11
1 | 17
1 | 18
2 | 11
2 | 17
3 | 11
4 | 18


Es soll nach Value gruppiert werden und alle Values ausgegeben werden, wo alle BelongsTo in der Wertemenge 15,20,11,17 vorkommen.

Ein par Beispiele:
---------------------------------
Wertemenge: 15,20,11,17
Ergebnis:
2
3
4
---------------------------------
Wertemenge: 18
Ergebnis:
4

---------------------------------
Wertemenge: 17
Ergebnis:
Keine Rückgabe, da er nur in Kombination mit 11 und 18 gültig ist.

---------------------------------
Wertemenge: 11,17,18
Ergebnis:
1
2
3
4


Eine Zusatzfrage:
Habt ihr einen Tipp für mich, wie man dann noch aus den Integerwerten einen String bilden kann in folgender Form:

(Letztes Beispiel)
Werte: 11,17,18
Ergebnis:
1 | "11+17+18"
2 | "11+17"
3 | "11+"
4 | "18+"

Danke für eure Hilfe!
Liebe Grüße
 
Werbung:
Hallo,
Ich hab wieder einmal ein Problem:
Ausgangspunkt ist eine eine Tabelle, in der verschidene ValueID's einer Wertemenge zugeordnet werden.

Tabelle:

Value (int) | BelongsTo (int)
1 | 11
1 | 17
1 | 18
2 | 11
2 | 17
3 | 11
4 | 18


Es soll nach Value gruppiert werden und alle Values ausgegeben werden, wo alle BelongsTo in der Wertemenge 15,20,11,17 vorkommen.

Ein par Beispiele:
---------------------------------
Wertemenge: 15,20,11,17
Ergebnis:
2
3
4
---------------------------------
Wertemenge: 18
Ergebnis:
4

---------------------------------
Wertemenge: 17
Ergebnis:
Keine Rückgabe, da er nur in Kombination mit 11 und 18 gültig ist.

---------------------------------
Wertemenge: 11,17,18
Ergebnis:
1
2
3
4


Eine Zusatzfrage:
Habt ihr einen Tipp für mich, wie man dann noch aus den Integerwerten einen String bilden kann in folgender Form:

(Letztes Beispiel)
Werte: 11,17,18
Ergebnis:
1 | "11+17+18"
2 | "11+17"
3 | "11+"
4 | "18+"

Danke für eure Hilfe!
Liebe Grüße


So ganz scheinen Deine Beispiele nicht zu stimmen. Mit PostgreSQL

Code:
test=*# select * from tschecksn ;
 val | b   
-----+----   
  1 | 11   
  1 | 17   
  1 | 18
  2 | 11
  2 | 17
  3 | 11
  4 | 18
(7 rows)

Time: 0,180 ms
test=*# select val from (select val, array_agg(b) as my_array from tschecksn group by val) foo where array[11,17,18] @> my_array;
 val
-----
  1
  2
  3
  4
(4 rows)

Time: 0,334 ms
test=*# select val from (select val, array_agg(b) as my_array from tschecksn group by val) foo where array[17] @> my_array;
 val
-----
(0 rows)

Time: 0,330 ms
test=*# select val from (select val, array_agg(b) as my_array from tschecksn group by val) foo where array[18] @> my_array;
 val
-----
  4
(1 row)

Time: 0,330 ms
test=*# select val from (select val, array_agg(b) as my_array from tschecksn group by val) foo where array[15,20,11,17] @> my_array;
 val
-----
  2
  3
(2 rows)

Time: 0,334 ms
test=*#

Deine Zusatzaufgabe, auch mit PG:

Code:
test=*# select val, array_to_string(array_agg(b),'+') from tschecksn group by val ;
 val | array_to_string
-----+-----------------
  1 | 11+17+18
  2 | 11+17
  3 | 11
  4 | 18
(4 rows)

Vielleicht findest ja ähnliche Funktionen.
 
Am SQL Server funktioniert diese abfrage leider nicht: "array_agg" wird nicht als Name iner integrierten Funktion erkannt.
Gibts da irgend welche alternativen?

Danke!
 
Am SQL Server funktioniert diese abfrage leider nicht: "array_agg" wird nicht als Name iner integrierten Funktion erkannt.
Gibts da irgend welche alternativen?

Danke!

Ja, das ist PostgreSQL. Ich kenne M$SQL nicht, vielleicht findest ja in der Doku oder zu eine Alternative. Array_agg() ist einfach eine Aggregation, in MySQL heißt das wohl group_concat() oder so. PostgreSQL hat halt wirklich viele Funktionen und Features, die teilweise doch weit über das gehen, was andere Datenbanken können.
 
Werbung:
Zurück
Oben