2014-10-29 13 views
7

Czy ktoś wie, czy Firebird 2.5 ma funkcję podobną do funkcji "STUFF" w SQL? Mam tabelę, która zawiera nadrzędne rekordy użytkownika i inną tabelę, która zawiera rekordy użytkownika podrzędnego związane z nadrzędnego. Chciałbym móc przeciągnąć rozdzielany przecinkami ciąg "ROLES", którego użytkownik używa, bez konieczności korzystania z drugiego zapytania, pętli ponad wartościami zwracanymi dla danego ID i tworzenia ciągu znaków samodzielnie.Firebird 2.5 - funkcja równoważna funkcji STUFF w języku SQL (GROUP_CONCAT w MySql/LISTAGG w Oracle)

Poszukuję innych powiązanych pytań, ale nie znalazłem żadnych. Pytanie w tym linku: string equivalent of Sum to concatenate jest zasadniczo tym, co chcę zrobić, ale z bazą danych Firebird 2.5.

Odpowiedz

10

Wygląda na to masz szczęście - Firebird 2.1 ma LIST() aggregate function który działa jak GROUP_CONCAT w MySQL, który pozwala kwerendy tak:

SELECT p.Name, LIST(c.Name, ', ') 
FROM parent p INNER JOIN child c on c.parentid = p.parentid 
GROUP by p.Name; 

Edit ponownego zamawiania

Użytkownik może być w stanie wpływać na porządek poprzez wstępne zamówienie danych w wyprowadzonej tabeli, przed zastosowaniem funkcji agregacji LIST, jak na przykład:

SELECT x.ParentName, LIST(x.ChildName, ', ') 
FROM 
(
    SELECT p.Name as ParentName, c.Name as ChildName 
    FROM parent p INNER JOIN child c on c.parentid = p.parentid 
    ORDER BY c.Name DESC 
) x 
GROUP by x.ParentName; 
+1

NIESAMOWITE !!!! Dziękuję bardzo StuartLC Nie wiedziałem o tej funkcji. Działa idealnie! Przyjmę poprawną odpowiedź, gdy tylko na to pozwoli. – Phil

+0

Co z zamawianiem? Powiedzmy, że potrzebuję nazwisk rodziców i dzieci w kolejności alfabetycznej, jeśli dodaję "ORDER BY p.Name, c.Name) Otrzymuję ten błąd:" Nieprawidłowe wyrażenie w klauzuli ORDER BY (nie zawarte ani w funkcji agregującej ani w klauzula GROUP BY) "ze względu na obecność c.Nazwa w klauzuli kolejność.Czy istnieje sposób na rozwiązanie tego problemu? – Bozzy

+1

@Bozzy może być w stanie wpływać na zamówienie przez wykonanie uporządkowanej pre-projekcji w wyprowadzonej tabeli . Zaktualizowałem odpowiedź. – StuartLC

Powiązane problemy