Tema: Re: MSSQL grupavimai
Autorius: Jornada Del Muerto
Data: 2011-06-27 14:14:50
Is bedos galima computed collumns naudot, jie isskaiciuojami is esamu duomenu, nors kaikuriais atvejais tai gali itakot performance.

Kadangi tingiu gilintis i konkrecia uzduoti parodysiu tik kaip jie aplamai naudojami, siaip computed laisvai eina sukurt per management studio nurodant computed column specification, cia tiesiog suscriptinta:

BEGIN TRANSACTION
GO
CREATE TABLE TblWithComputedColumns
 (
 id int NOT NULL IDENTITY (1, 1),
 x int NOT NULL,
 y int NOT NULL,
 suma  AS x*y,
 toString  AS cast(id as nvarchar) +' id: '+cast(x as nvarchar) +' x '+cast(y as nvarchar) +' = ' +cast( x * y as nvarchar)
 )  ON [PRIMARY]
GO
ALTER TABLE dbo.TblWithComputedColumns ADD CONSTRAINT
 DF_TblWithComputedColumns_x DEFAULT 0 FOR x
GO
ALTER TABLE dbo.TblWithComputedColumns ADD CONSTRAINT
 DF_TblWithComputedColumns_y DEFAULT 0 FOR y
GO
ALTER TABLE dbo.TblWithComputedColumns ADD CONSTRAINT
 PK_TblWithComputedColumns PRIMARY KEY CLUSTERED 
 (
 id
 ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
ALTER TABLE dbo.TblWithComputedColumns SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'dbo.TblWithComputedColumns', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.TblWithComputedColumns', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.TblWithComputedColumns', 'Object', 'CONTROL') as Contr_Per 


-- fake data
INSERT INTO TblWithComputedColumns (x,y) VALUES(1,2)
INSERT INTO TblWithComputedColumns (x,y) VALUES(10,2434)
INSERT INTO TblWithComputedColumns (x,y) VALUES(1323,2434)
INSERT INTO TblWithComputedColumns (x,y) VALUES(1213,243)

-- select all 
SELECT * FROM TblWithComputedColumns

-- Stai pagal turimus duomenis sukurti kiti columnai kurie gali but naudojami skaityme
-- bet computed columns kartais gali stipriai letinti!



"If" <baska@hotmail.com> wrote in message news:iu99lq$gr1$1@trimpas.omnitel.net...
> 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. 
> 
>