Tema: Re: MSSQL grupavimai
Autorius: If
Data: 2011-06-27 09:58:03
Cia ne pirma karta eina panasus uzdaviniai. Jei ukiskai as laikausi 
taisykles, kiek imanoma is pradziu uzdavinius spresti per duomenu struktura, 
toliau per selectus ir kas lieka atlikti manipuliacijas data setuose. 
Nezinau ar galima tame uzdavini eiti ne per selecta, o per duomenu 
struktura, tokiu atveju sukurus papildomus laukus jis sprendziasi ukiskai ir 
paprastai.

1 Sukuriami arba virtualioje lentoje, arba tiesiog fiziskai lentoje pirmu 
atveju papildomi du laukai, 1 NrSkirtumai, NrGrupes. Kitais dviem dar vienas 
papildomas trecias laukas Nr1
2  Esant 2 ir 3 atveju "parsinam" stringa, isskiriam skaiciu ir sukeliam i 
Nr1 lauka
3 i NrSkirtumai lauka sukeliam duomenis, kuriu reiksme lygi, pries tai 
esancio ir dabartinio iraso skirtumui(irasu atsortavimas butinas pagal Nr)
4 Suzymim grupes, kuriu algoritmas skamba panasiai taip,  Jei NrSkirtumai > 
1, TAI , NrGrupes = NrGrupes + 1

Turint jau tokia struktura toliau nesunkiai gausi rezultata su elementariu 
Goup By Selectu pagal NrGrupes lauka.

P.S Mano praktika sako, kad visada reikia daryti taip db, kad isivaizduoti 
jog joje bus maziausiai keli milijonai irasu, todel vengiu kiek imanoma 
virtualiu struktura ir tokia struktura organizuociau fiziskai, paciose 
lentose duomenu bazeje.

Cia toks ukiskas sprendimo variantas butu.


"zZz" <zZz@zirzilia.lt> wrote in message 
news:iu948p$a1a$1@trimpas.omnitel.net...
> Šiandien prireiks, gal kas darėt sekantį grupavimą ir pasidalinsit metodu?
>
> MSSQL 2008 R2
>
> Yra lenta su lauku NR nvarchar(5) not null. Reikia sugrupuoti pgl. iš 
> eilės einančius numerius,
> turėtų sugrupuoti taip (ryšium su tuo, kad kiti parametrai vienodi):
>
> ---
> 1.
> jei yra šie NR - 1, 2, 3, 27, 28, 35, 51, 52, 53, 54
>
> 1-3
> 27-28
> 35
> 51-54
>
> ---
> 2.
> Atitinkamai su 1A, 2A, 3A, 27A, 28A, 35A, 51A, 52A, 53A, 54A
>
> 1A-3A
> 27A-28A
> 35A
> 51A-54A
>
> ---
> 3.
> Persidengiančios aibės - 1, 1A, 2, 2A, 3 - turėtų būti atskiros
>
> 1-3
> 1A-2A
>
> ---
> Domina bet kurio varianto atskirai ir visų variantų bendras sprendimas. 
> Ačiū iš anksto.