2014-10-29 18 views
7

Firebird 2.5'in SQL'deki "STUFF" işlevine benzer bir işlevi olup olmadığını bilen var mı? Ana kullanıcı kayıtlarını içeren bir tablo ve ebeveynle ilgili alt kullanıcı kayıtlarını içeren başka bir tablo var. Kullanıcının ikinci bir sorgu kullanmak zorunda kalmadan "ROLES" in bir virgülle ayrılmış dizisini çekebilmek, verilen ID için döndürülen değerler üzerinde döngü yapmak ve dizeyi kendim oluşturmak istiyorum.Firebird 2.5 - SQL'de STUFF için eşdeğer işlev (Oracle'da MySql/LISTAGG içinde GROUP_CONCAT)

Diğer ilgili soruları aradım, ancak bulamadım. Bu bağlantıdaki soru string equivalent of Sum to concatenate temelde ne yapmak istiyorum, ama Firebird 2.5 veritabanı ile. şans olduğu gibi

cevap

10

görünüyor - Firebird 2.1 sorgu şöyle veriyor MySql, içinde GROUP_CONCAT gibi çalışan bir LIST() aggregate function sahiptir:

Sen may Sipariş yeniden,

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

Edit LIST toplama işlevini uygulamadan önce, türetilmiş bir tablodaki verileri ön sipariş vererek, siparişi etkileyebilmeli, bu gibi:

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

AWESOME !!!! Çok teşekkür ederim StuartLC Bu işlevin farkında değildim. Mükemmel çalışıyor! Bana izin verir vermez doğru cevabı kabul eder. – Phil

+0

Sipariş vermek nedir? Diyelim ki ebeveynlerin ve çocukların isimlerine alfabetik sırayla ihtiyacım var, eğer "ORDER BY p.Name, c.Name) eklediğimde bu hatayı alıyorum:" ORDER BY yan tümcesinde geçersiz ifade (toplama işlevinde veya GROUP BY yan tümce tümce tümcesinde "c.Name öğesinin varlığından dolayı. Bu sorunu çözmenin bir yolu var mı? – Bozzy

+1

@Bozzy türetilmiş bir tabloda bir ön projeksiyon yaparak sıralamayı etkileyebileceksiniz Cevabı güncelledim. – StuartLC