concat dla jednostek pomocniczych

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

yakuzz
Posty: 23
Rejestracja: 02 cze 2022, 10:58
Rola: Użytkownik CDN XL
Wersja: 2019

concat dla jednostek pomocniczych

Post autor: yakuzz »

Witam, staram się uzyskać w jednym wierszu wyniki listy towarów z jednostka główną w jednej kolumnie i wszystkimi jednostkami pomocniczymi wyświetlonymi po przecinku w następnej kolumnie (ew. każda jednostka pomocnicza w następnej kolumnie). Udało mi się wyświetlić jednostki podstawowe i pomocnicze , ale towary z kilkoma jednostkami pomocniczymi są w osobnych wierszach. Chciałem użyć funkcji concat , ale wywala błędy. Obstawiam złe odwołanie do tabeli obcej. Prośba o pomoc w rozwiązaniu wyświetlania
kod działający wyświetlający rekordy:
select cdn.twrkarty.Twr_Nazwa, cdn.twrkarty.Twr_Jm, cdn.TwrJm.TwJ_JmZ
from cdn.twrkarty left join cdn.TwrJm
on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
order by Twr_Nazwa

zły kod:
select Concat (cdn.TwrJm.TwJ_JmZ',') cdn.twrkarty.Twr_Nazwa, cdn.twrkarty.Twr_Jm, cdn.TwrJm.TwJ_JmZ
from cdn.twrkarty left join cdn.TwrJm
on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
order by Twr_Nazwa

mr_zola
Posty: 16
Rejestracja: 17 lis 2011, 09:27
Rola: Administrator CDN XL
Wersja: 2019

Re: concat dla jednostek pomocniczych

Post autor: mr_zola »

Zapomniałeś o przecinku, a nawet dwóch

Kod: Zaznacz cały

select Concat(cdn.TwrJm.TwJ_JmZ,','), cdn.twrkarty.Twr_Nazwa, cdn.twrkarty.Twr_Jm, cdn.TwrJm.TwJ_JmZ
from cdn.twrkarty left join cdn.TwrJm
on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
order by Twr_Nazwa

yakuzz
Posty: 23
Rejestracja: 02 cze 2022, 10:58
Rola: Użytkownik CDN XL
Wersja: 2019

Re: concat dla jednostek pomocniczych

Post autor: yakuzz »

Ograniczyłem wyświetlanie do jednej kolumny i przecinek wstawia, dzięki za pomoc. Niestety podstawia mi tylko jedna jednostkę pomocniczą. Mamy towary z wieloma jednostkami pomocniczymi. W SQL management studio wyświetla kilka powtarzających się rekordów z różnymi jednostkami ,ale w cdn nie powtarza rekordów. Macie może jakiś pomysł jak dorzucić jednostki pomocnicze do kolejnej kolumny lub wstawić po przecinku?

select Concat (cdn.TwrJm.TwJ_JmZ,',') as jednostki_pomocnicze
from cdn.twrkarty left join cdn.TwrJm
on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
where {filtrsql}

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: concat dla jednostek pomocniczych

Post autor: praiser »

spróbuj tak:

Kod: Zaznacz cały

select (
select STRING_AGG(cast(cdn.TwrJm.TwJ_JmZ as varchar(max)), ',') from CDN.TwrKarty
left join cdn.TwrJm
on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
where {filtrsql}
FOR XML PATH ('')
) as [Jednostka pomocnicza]
--------------------------------
Pozdrawiam
WW

yakuzz
Posty: 23
Rejestracja: 02 cze 2022, 10:58
Rola: Użytkownik CDN XL
Wersja: 2019

Re: concat dla jednostek pomocniczych

Post autor: yakuzz »

dzięki za odpowiedź, niestety nie mam jak sprawdzić string_agg na naszej wersji sql.

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: concat dla jednostek pomocniczych

Post autor: praiser »

Można z replace uzyskać podobny efekt dla wersji SQL starszych

Kod: Zaznacz cały

select
	replace(
		replace(
			(
				select
					CAST(twrJm.Twj_Jmz AS nvarchar(max))
				from
					CDN.TwrKarty
					join cdn.TwrJm on cdn.TwrKarty.Twr_GIDNumer = cdn.TwrJm.TwJ_TwrNumer
				where
					{ filtrsql } FOR XML PATH ('foo')
			),
			'</foo>',
			' | '
		),
		'<foo>',
		''
	) as [Jednostka pomocnicza]
--------------------------------
Pozdrawiam
WW

yakuzz
Posty: 23
Rejestracja: 02 cze 2022, 10:58
Rola: Użytkownik CDN XL
Wersja: 2019

Re: concat dla jednostek pomocniczych

Post autor: yakuzz »

Działa, dziękuje za pomoc.

ODPOWIEDZ