Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem MS SQL - riadky s medzisuctom a celkovym suctom preskocit v cislovani

V selecte mam vybrane stlpce, spravene medzisucty a sucty pomocou grouping set. Vsetko ok, ale . . . ale potrebujem ocislovat riadky, to by nebol problem, ale zase ale . . . ale maju sa ocislovat len riadky z tabulky, nie riadky v ktorych je medzisucet. ked pouzijem row_number, ocisluje mi vsetky. Ta sa vobec dosiahnut to, aby riadky s medzisuctom a celkovym suctom preskocil v cislovani? A musi to byt v jenom selecte, nemoze to byt napr nejaka funkcia ci trigger ci co, nemam to ako ulozit.

Změna hloupého předmětu, původně: MSSQL (host)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ještě mě napadl další Workarround. V teto tabulce nemam ID, ale pouzil jsem subselect, ve kterem pom…
Jan Fiala 23.02.2022 13:59
Jan Fiala
Tak dostal som sa k tomu, konecne, velke diky za snahu, ale nieje to dobre. Priklad ide ok, ale ako…
truhlik 03.03.2022 19:53
truhlik
Skús: declare @tTemp table (Skupina int, Nazev char(10), Pocet int) insert into @tTemp (Nazev, Skup…
zavo 05.03.2022 09:56
zavo
neskutocne diky, test funguje, idem to skusit aplikovat na moje data . . . DIK (ale sucty byvaju na…
truhlik 05.03.2022 17:02
truhlik
To som nemyslel ze to prerobis, stacilo na konci vyhodit order by . . . . uz som to "narouboval" na… poslední
truhlik 05.03.2022 18:51
truhlik

Ještě mě napadl další Workarround. V teto tabulce nemam ID, ale pouzil jsem subselect, ve kterem pomoci Row_Number() ocisluju radky a na ten subselect teprve pouziju groupovani. Tohle je fyzicky jen jeden select a mel by jit spustit i v tom tvem prostredi.

declare @tTemp table (Skupina int, Nazev char(10), Pocet int)
insert into @tTemp (Nazev, Skupina, Pocet) values
	('Jedna', 1, 10),
	('Dva', 1, 15),
	('Tri', 2, 5),
	('Ctyri', 2, 12)


SELECT ID, Skupina, Pocet = Sum(Pocet)
FROM (select ID = ROW_NUMBER() OVER (ORDER BY (SELECT 1)), * from @tTemp) a
GROUP BY
	GROUPING SETS (
		(Skupina, ID),
		(Skupina),
		() )
ORDER BY
	Skupina, 1;

Tak dostal som sa k tomu, konecne, velke diky za snahu, ale nieje to dobre. Priklad ide ok, ale ako nahle vlozim napr insert into @tTemp (Nazev, Skupina, Pocet) values
('Jedna', 1, 10),
('Dva', 4, 15),
('Tri', 4, 5),
('Ctyri', 2, 12) tak sa to cele rozsype, pretoze v priklade ti ide zaradom skupina 1,2 . . . riadky sa mi ocisluju, ale potom vysledok mam napr id null, null, 1,2,5, null, 3,4,7, nul..... namiesto napr. 1,2,3 null, 4 5 6....
cislovat id musi az vysledok
myslim ze toto uz prekroci susedsku mieru vypomoci, aj tak dik.
aj ked nie vybavene, tak dame vybavene, musim to obabrat inac . . .
DIK

Skús:

declare @tTemp table (Skupina int, Nazev char(10), Pocet int)
insert into @tTemp (Nazev, Skupina, Pocet) values
('Jedna', 1, 10),
('Dva', 4, 15),
('Tri', 4, 5),
('Ctyri', 2, 12)

SELECT ID, Skupina, Pocet = Sum(Pocet)
FROM (select ID = ROW_NUMBER() OVER (ORDER BY Skupina, Pocet), * from @tTemp) a
GROUP BY
GROUPING SETS (
(Skupina, ID),
(Skupina),
() )
ORDER BY
Skupina, 1;

Zpět do poradny Odpovědět na původní otázku Nahoru