[SQL] Kolumna grup na karcie towarowej

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

Moderator: mikey

Kris86
Posty: 141
Rejestracja: 09 wrz 2021, 18:27
Rola: Administrator CDN XL
Wersja: 2019

[SQL] Kolumna grup na karcie towarowej

Post autor: Kris86 »

Cześć,
Potrzebuję dodać kolumnę grup na zakładce Wszystkie wg kodu karty towarowej.
Chciałbym aby pokazywało mi wszystkie grupy do których jest przypisany towar/produkt. Grupy tego towaru/produktu, mogą być wtedy wypisane ciągiem w jednej linii (komórce).
Czy wtedy można zaznaczyć która grupa jest tą domyślną ?

Dziękuję za wszelką pomoc.

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

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: praiser »

Teoretycznie tak chociaż kolumna może mieć limit znaków (jeżeli jest dużo podgrup)

Kod: Zaznacz cały

select (
select STRING_AGG(ISNULL(CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)),' '), ' | ') from CDN.TwrKarty
JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
where {filtrsql}
FOR XML PATH ('')
) as Grupy 
Grupa domyślna jest w CDN.TwrGrupyDom (join on Twr_GIDNumer=Tgd_GIDNumer and Twr_GIDTyp=Tgd_GIDTyp)
--------------------------------
Pozdrawiam
WW

Kris86
Posty: 141
Rejestracja: 09 wrz 2021, 18:27
Rola: Administrator CDN XL
Wersja: 2019

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: Kris86 »

praiser pisze:
27 kwie 2022, 10:55
Teoretycznie tak chociaż kolumna może mieć limit znaków (jeżeli jest dużo podgrup)

Kod: Zaznacz cały

select (
select STRING_AGG(ISNULL(CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)),' '), ' | ') from CDN.TwrKarty
JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
where {filtrsql}
FOR XML PATH ('')
) as Grupy 
Grupa domyślna jest w CDN.TwrGrupyDom (join on Twr_GIDNumer=Tgd_GIDNumer and Twr_GIDTyp=Tgd_GIDTyp)
Niestety pojawia się błąd po zapisaniu dyskietką. Nie wiem co dalej mam z tym zrobić.
Załączniki
2022-04-28 at 13-22-14.png
2022-04-28 at 13-22-14.png (22.02 KiB) Przejrzano 1939 razy

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

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: praiser »

STRING_AGG (Transact-SQL)

Applies to: yesSQL Server 2017 (14.x) and later YesAzure SQL Database YesAzure SQL Managed Instance yesAzure

U mnie nie pokazuje błędu.
Clipboard01.jpg
--------------------------------
Pozdrawiam
WW

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

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: praiser »

Można by tak na około popróbować z replace

Kod: Zaznacz cały

select replace(replace(
				(select
					(CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))) from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
					where {filtrsql}
					FOR XML PATH ('I')
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
--------------------------------
Pozdrawiam
WW

Kris86
Posty: 141
Rejestracja: 09 wrz 2021, 18:27
Rola: Administrator CDN XL
Wersja: 2019

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: Kris86 »

praiser pisze:
28 kwie 2022, 14:11
Można by tak na około popróbować z replace

Kod: Zaznacz cały

select replace(replace(
				(select
					(CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))) from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
					where {filtrsql}
					FOR XML PATH ('I')
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
U mnie z funkcją Replace działa :). Wielkie Dzięki!
A czy da się jeszcze wyróżnić grupę domyślną. Kolor czcionki, pogrubienie, znacznik, ..?

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

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: praiser »

Takie formatowanie w obrębie jednego ciągu znaków to nie wiem czy się da ale można oznaczyć domyślną grupę, np. gwiazdką czy coś.

Kod: Zaznacz cały

select replace(replace(
				(select
					(case WHEN Twg_GroNumer=Tgd_Gronumer THEN '*'+CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))+'*' else CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)) end)					
										from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
					JOIN CDN.TwrGrupyDom ON Twr_GIDTyp=Tgd_GIDTyp AND Twr_GIDNumer=Tgd_GIDNumer and TGd_GIDTyp=16
					where {filtrsql}
					FOR XML PATH ('I')
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
--------------------------------
Pozdrawiam
WW

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

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: praiser »

Jeszcze poprawka gdy indeks nie ma grupy

Kod: Zaznacz cały

select replace(replace(
				(select 
					(case WHEN Twg_GroNumer=Tgd_Gronumer THEN '*'+CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))+'*' ELSE CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)) end)
										from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16 and TwG_GrONumer<>0
					JOIN CDN.TwrGrupyDom ON Twr_GIDTyp=Tgd_GIDTyp AND Twr_GIDNumer=Tgd_GIDNumer and TGd_GIDTyp=16 and Tgd_GrONumer<>0
					where {filtrsql}
					FOR XML PATH ('I' )
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
--------------------------------
Pozdrawiam
WW

Kris86
Posty: 141
Rejestracja: 09 wrz 2021, 18:27
Rola: Administrator CDN XL
Wersja: 2019

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: Kris86 »

praiser pisze:
29 kwie 2022, 13:20
Takie formatowanie w obrębie jednego ciągu znaków to nie wiem czy się da ale można oznaczyć domyślną grupę, np. gwiazdką czy coś.

Kod: Zaznacz cały

select replace(replace(
				(select
					(case WHEN Twg_GroNumer=Tgd_Gronumer THEN '*'+CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))+'*' else CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)) end)					
										from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16
					JOIN CDN.TwrGrupyDom ON Twr_GIDTyp=Tgd_GIDTyp AND Twr_GIDNumer=Tgd_GIDNumer and TGd_GIDTyp=16
					where {filtrsql}
					FOR XML PATH ('I')
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
Działa. Wystarczy znakiem *
Wielkie Dzięki!

Kris86
Posty: 141
Rejestracja: 09 wrz 2021, 18:27
Rola: Administrator CDN XL
Wersja: 2019

Re: [SQL] Kolumna grup na karcie towarowej

Post autor: Kris86 »

praiser pisze:
29 kwie 2022, 13:46
Jeszcze poprawka gdy indeks nie ma grupy

Kod: Zaznacz cały

select replace(replace(
				(select 
					(case WHEN Twg_GroNumer=Tgd_Gronumer THEN '*'+CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max))+'*' ELSE CAST(cdn.TwrGrupaPelnaNazwa(twg_GrONumer) AS nvarchar(max)) end)
										from CDN.TwrKarty
					JOIN CDN.TwrGrupy ON Twr_GIDTyp=TwG_GIDTyp AND Twr_GIDNumer=TwG_GIDNumer and TwG_GIDTyp=16 and TwG_GrONumer<>0
					JOIN CDN.TwrGrupyDom ON Twr_GIDTyp=Tgd_GIDTyp AND Twr_GIDNumer=Tgd_GIDNumer and TGd_GIDTyp=16 and Tgd_GrONumer<>0
					where {filtrsql}
					FOR XML PATH ('I' )
				)
				,'</I>',' | ') , '<I>','')
		as Grupa
Bez grupy chyba nie da się założyć indeksu, ani odłączyć grupę od istniejącego indeksu (jeżeli ma tylko jedną grupę). Musi być zawsze minimum jedna grupa.
Czy się mylę?

ODPOWIEDZ