SQL Server: łączenie wielu wierszy w jeden wiersz
Mam takie zapytanie SQL;
SELECT *
FROM Jira.customfieldvalue
WHERE CUSTOMFIELD = 12534
AND ISSUE = 19602
I to są Wyniki;
To czego chcę to; Pokazywanie w jednym wierszu (komórce) połączone wszystkie STRINGVALUE
's i są oddzielone przecinkiem. Like this;
SELECT --some process with STRINGVALUE--
FROM Jira.customfieldvalue
WHERE CUSTOMFIELD = 12534
AND ISSUE = 19602
Araç Listesi (C2, K1 vb.Belgeler; yoksa Ruhsat Fotokopileri), Min. 5
araç plakası için İnternet Sorgusu, Son 3 Yıla Ait Onaylı Yıl Sonu
Bilanço + Gelir Tablosu, Son Yıl (Yıl Sonuna ait) Detay Mizanı, İçinde
Bulunduğumuz Yıla ait Ara Dönem Geçici Vergi Beyannamesi, Bayi Yorum
E-Maili, Proforma Fatura
Jak mogę to zrobić? 5 answers
Istnieje kilka metod.
Jeśli chcesz zwrócić tylko skonsolidowaną wartość ciągu, jest to dobre szybkie i łatwe podejście
DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + ', ', '') + stringvalue
FROM jira.customfieldValue
WHERE customfield = 12534
AND ISSUE = 19602
SELECT @combinedString as StringValue
Który zwróci Twój połączony ciąg.
Możesz również wypróbować jedną z metod XML, np.
SELECT DISTINCT Issue, Customfield, StringValues
FROM Jira.customfieldvalue v1
CROSS APPLY ( SELECT StringValues + ','
FROM jira.customfieldvalue v2
WHERE v2.Customfield = v1.Customfield
AND v2.Issue = v1.issue
ORDER BY ID
FOR XML PATH('') ) D ( StringValues )
WHERE customfield = 12534
AND ISSUE = 19602
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-16 10:37:25
Można osiągnąć to jest połączyć dla ścieżki XML i rzeczy w następujący sposób:
SELECT (STUFF((
SELECT ', ' + StringValue
FROM Jira.customfieldvalue
WHERE CUSTOMFIELD = 12534
AND ISSUE = 19602
FOR XML PATH('')
), 1, 2, '')
) AS StringValue
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 10:35:03
Istnieje do tego wygodna metoda w MySql o nazwie GROUP_CONCAT. Odpowiednik dla SQL Server nie istnieje, ale możesz napisać swój własny używając sqlclr. Na szczęście ktoś już to za ciebie zrobił.
Twoje zapytanie zamienia się w to (co btw jest o wiele ładniejszą składnią):
SELECT CUSTOMFIELD, ISSUE, dbo.GROUP_CONCAT(STRINGVALUE)
FROM Jira.customfieldvalue
WHERE CUSTOMFIELD = 12534 AND ISSUE = 19602
GROUP BY CUSTOMFIELD, ISSUE
Ale proszę pamiętać, że ta metoda jest dobra dla co najwyżej 100 wierszy w grupie . Poza tym będziesz miał poważne problemy z wydajnością. Agregaty SQLCLR muszą serializować dowolne wyniki pośrednie i to szybko gromadzi się do dość dużo pracy. Pamiętaj o tym!
Co ciekawe FOR XML
nie cierpi na ten sam problem, ale zamiast tego używa tej strasznej składni.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-05 21:19:41
Użycie wbudowanej funkcji MySQL group_concat() będzie dobrym wyborem dla uzyskania pożądanego rezultatu. Składnia będzie -
SELECT group_concat(STRINGVALUE)
FROM Jira.customfieldvalue
WHERE CUSTOMFIELD = 12534
AND ISSUE = 19602
Przed wykonaniem powyższego polecenia upewnij się, że zwiększyłeś Rozmiar group_concat_max_len w przeciwnym razie całe wyjście może nie zmieścić się w tej komórce.
Aby ustawić wartość group_concat_max_len, wykonaj poniższe polecenie -
SET group_concat_max_len = 50000;
Możesz odpowiednio zmienić wartość 50000, zwiększasz ją do wyższej wartości jako wymagane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 13:11:40
Wierzę w bazy danych, które wspierają listagg funkcja, którą można wykonać:
select id, issue, customfield, parentkey, listagg(stingvalue, ',') within group (order by id)
from jira.customfieldvalue
where customfield = 12534 and issue = 19602
group by id, issue, customfield, parentkey
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-27 18:02:37