Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako postaviti rows brojač da izlazi kao rezultat SQL query?

[es] :: Baze podataka :: Kako postaviti rows brojač da izlazi kao rezultat SQL query?

[ Pregleda: 5224 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

v_v
Software developer

Član broj: 5270
Poruke: 157
*.in-addr.btopenworld.com.



Profil

icon Kako postaviti rows brojač da izlazi kao rezultat SQL query?14.09.2005. u 15:46 - pre 226 meseci
Aloha!

Radim na Sybase i MSSQL DMBS-ovima, ovo me muči čitav dan - uzmimo najbanalniji primer, imam tabelu sa samo dva polja, brojem lične karte (nek to bude primary key), i imenom i prezimenom, dakle:

SELECT * FROM PUNOLETNA_LICA

bi dalo rezultat nešto kao

A100046 - Pera Perić
B704867 - Mika Mikić
C565788 - Baja Bajić
D564986 - Zuba Zubić

ima li neki fazon da ubacim u SELECT query tako da mi izbaci

A100046 - Pera Perić - 1
B704867 - Mika Mikić - 2
C565788 - Baja Bajić - 3
D564986 - Zuba Zubić - 4

Znači samo redni broj redova koji su query rezultati, ali su dinamički, tj nisu sačuvani u tabeli niti su deo baze? Što je iritirajuće, u Query Analajzeru MSSQL-a ovo već stoji na levoj strani, ali više onako kao deo programa - e postoji li sintaksa za SQL tako da takav redni broj bude i deo rezultata? Missim, tako prosta stvar...

Hvala i poz
Humax 5400Z
ToH 3.3 - HoT7.1
 
Odgovor na temu

jajo
Zagreb

Član broj: 18276
Poruke: 91
*.adsl.net.t-com.hr.



Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?14.09.2005. u 17:50 - pre 226 meseci
Ak se ne varam ove baze nemaju rownum, ko sto ima oracle. neg se mora definirati neka varijabla i onda se inkrementira u selectu. (Nemoj ovo uzeti za sigurno posto ne radim s tim bazama). Ak ti ovo treba u nekom report alatu, manje vise svaki ima neku runnning sum funkcionalnost, pa onda sam stavi rsum(1) (ili kak se vec zove running sum funkcija u tom alatu).
 
Odgovor na temu

v_v
Software developer

Član broj: 5270
Poruke: 157
*.in-addr.btopenworld.com.



Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?16.09.2005. u 09:59 - pre 226 meseci
Nisam našao ništa slično :( Thanx anyway
Humax 5400Z
ToH 3.3 - HoT7.1
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.219.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?16.09.2005. u 11:55 - pre 226 meseci
Ja sam Djura, a ovo su Djurine kucne SQL Server carolije :-D

Sada cu vam demonstrirati kako da kod kuce dodate redni broj svojoj tabeli koja cuva informacije o personalu u vasoj multibilionskoj korporaciji :)

Prvo ... uzmete tabelu sa Personalom
Code:

CREATE TABLE Personal
(
 LK char(15),
 IME varchar(50),
 PREZIME varchar(50),
 PRIMARY KEY (LK)
)


Onda uradite temp tabelu koja ce cuvati Redne brojeve ...
Code:

CREATE TABLE #RedniBr (
  RedniBr int IDENTITY (1, 1),
  LK char(15) 
)


Napunite tabelu sa parovima RedniBr + LK...
Code:

INSERT #RedniBr (LK)
SELECT LK
FROM Personal
ORDER BY Ime


Uzmite podatke za prikaz u aplikaciji ili gde god zelite ....
Code:

SELECT RedniBr, p.LK, IME, PREZIME
FROM #RedniBr r JOIN Personal p
ON p.LK = e.LK
ORDER BY RedniBr


Otarasite se temp tabele ...
Code:

DROP TABLE #RedniBr



People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.eqao.com.



+79 Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?16.09.2005. u 14:18 - pre 226 meseci
Redni brojevi mogu da se urade ako se koriste subqueries, u slucajevima kad kaveri ima neki sort. Ovako nekako moe u MS SQL:

SELECT
RadnikID
, Ime
, Prezime
, RedniBroj = (SELECT COUNT(*) FROM Radnici AS B
WHERE B.R.radnikID<=A.RadnikID)
FROM Radnici AS A
ORDER BY RadnikID

AKo dobijes obrnuti redosled, samo promeni <= u >=, amozda jednakos ne treba. Eksperimantisi malo.

Pazi, ovo moze da bude sporo ako ti je tabela jako velika i nemas WHERE

;-)
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.84.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?18.09.2005. u 13:27 - pre 226 meseci
Ovo sto ti zidar predlaze je samo parcijalno resenje ... jer mozes sortirati jedino po ID koloni. To resenje moze se upotrebiti samo kad sortiras po unique koloni.

Drugo, Zidarovo moze monopolizirati SQL server kaj tabela narasne ...
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?18.09.2005. u 14:19 - pre 226 meseci
On Sun, 18 Sep 2005 14:27:19 CEST, "Skopje, Macedonia (Riste Pejov)"

wrote:


Citat:

Ovo sto ti zidar predlaze je samo parcijalno resenje ... jer mozes sortirati jedino po ID koloni. To resenje moze se upotrebiti samo kad sortiras po unique koloni.



Opste pravilo za tu vrstu posla je:


1.- Oformis privremenu tabelu (Ime, Prezime, ID). Ime i Prezime su

polja iz tvoje tabele koju prikazujes, a ID je tip AutoNumber ili se

na bilo koji nacin automatski uvecava za 1. Implementacija zavisi od

DBMS koji koristis (trigeri, funkcije,...).


2.- Selektujes u polaznoj tabeli Ime i Prezime ( sa ili bez WHERE

klauzule) u bilo kom redosledu i punis tim vrednostima privremenu

tabelu. Polje ID u privremenoj tabeli ce se automatski uvecavati za

jedan.


3.- Privremenu tabelu prikazes


4.- Privremenu tabelu obrises.


Ovaj princip uvek funkcionise, ne opterecuje previse server ( osim

sto se izvrsavaju dva upiat) i moze se sprovesti uskladistenom

procedurom ili na neki drugi nacin zavisan od servera baze koji

koristis.


 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.219.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?19.09.2005. u 09:23 - pre 226 meseci
Citat:
mkaras:
Opste pravilo za tu vrstu posla je:
....
Ovaj princip uvek funkcionise, ne opterecuje previse server ( osim
sto se izvrsavaju dva upiat) i moze se sprovesti uskladistenom
procedurom ili na neki drugi nacin zavisan od servera baze koji
koristis.


Tako nesto kao opste pravilo za redni broj sloga ne postoji. Ovaj workaround je jedino zato sto SQL Server ne zna da iz stored procedure vrati recordset bez upotrebe temp tabele.

Ipak kad bi postojalo opste pravilo onda bi to bilo:
1. Oformis stored proc koji ce vracati cursor/recordset
2. Unutar stored proc-a oformis cursor koji ce za svakog recorda dodati row number
3. Otvoris kursor/select * from storedproc sa klienta i prikazes podatke

Ali SQL server je malo specifican da za svaki server side kursor formira temp tabelu, tako da kod SQL server sve je isto dali ces koristiti kursor ili rucno kreiranu temp tabeli.

Kad su u pitanju drugi RDBMS ovaj method je apsolutno neprihvatljiv. Zato sto kad se radi o velikim tabelama i razlicitim kriteriuma sortiranja, temp tabele mogu ugusiti server.

Recimo imamo tabelu sa 1mil recorda.
Kod SQL Server imas ovako:
1. Imas milion fetch operacija sa diska da uzmes tabelu
2. Jos milion da je insertujes u temp tbl
3. jos milion i nesto da ih join-ujes

Na primer kod Firebird imas:
1. Imas milion fetch operacija sa diska da uzmes tabelu
2. Pre nego se posalje svaki record mu se presmeta rownum i record se posalje preko mreze.

Na kraju ... za SQL Servera .. valjda ce ti biti najjeftinije da rownum presmetas kod klijenta ....

[rant]
Znaci opet ... menjaj taj SQL Server sa pravom bazom :-D
[/rant]

People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Kako postaviti rows brojaī da izlazi kao rezultat SQL query?20.09.2005. u 11:14 - pre 226 meseci
Citat:

Ipak kad bi postojalo opste pravilo onda bi to bilo:

1. Oformis stored proc koji ce vracati cursor/recordset

2. Unutar stored proc-a oformis cursor koji ce za svakog recorda dodati row number

3. Otvoris kursor/select * from storedproc sa klienta i prikazes podatke



Ako se ne varam ovde je rec o bazama podataka, a ne o nekoj konkretnoj

bazi. Tako da princip koji sam ja izlozio moze da se primeni svuda i

nasvakom mestu, bez obzira na vrstu baze. A to moze biti i Access ili

Paradox ili VisualFox ili bilo sta.


Nemaju svi sistemi mogucnost izvrsavanja i cuvanja uskladistenih

procedura, okidaca, kursora, recordseta i slicno.


Normalno, da ako sistem podrzava privremene tabele u memoriji

(kursore) da ih treba primeniti. Naravno da treba primeniti i sve

ostale ostale pogodnosti koje sistem pruza, ali princip ostaje isti.


Citat:

Recimo imamo tabelu sa 1mil recorda.

Kod SQL Server imas ovako:

1. Imas milion fetch operacija sa diska da uzmes tabelu

2. Jos milion da je insertujes u temp tbl



Podrazumeva se da se kolicina podataka koja se prikazuje ogranicava

(WHERE klauzula jos uvek postoji, a i radi na svim sistemima)


Citat:

3. jos milion i nesto da ih join-ujes



E ovo mi tek nije jasno. Zasto bih join-ovao kada je posao vec

zavrsen, oformljeni su redni brojevi slogova i prikazuju se?


Citat:

Na kraju ... za SQL Servera .. valjda ce ti biti najjeftinije da rownum presmetas kod klijenta ....



Ko jos salje klijentu nesto sto mu nije potrebno? Valjda je opste

pravilo da klijent, kroz mrezu, prima samo one podatke koji su mu

potrebni i vec pripremljeni za njegove potrebe. Znaci bez ikakvih

nepotrebnih i privremenih podataka.


Citat:

Znaci opet ... menjaj taj SQL Server sa pravom bazom :-D



Opet ponavljam ovo pitanje sam svahtio kao opste pitanje a ne vezano

za neki odredjeni sistem baze podataka.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?20.09.2005. u 13:44 - pre 226 meseci
Citat:
Riste Pejov:

Na kraju ... za SQL Servera .. valjda ce ti biti najjeftinije da rownum presmetas kod klijenta ....

[rant]
Znaci opet ... menjaj taj SQL Server sa pravom bazom :-D
[/rant]


ROW_NUMBER() SQL Server 2005 beta :)

E sada ce neko reci pa to je bilo davno na Oracle-u




[Ovu poruku je menjao negyxo dana 20.09.2005. u 14:45 GMT+1]
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.221.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?20.09.2005. u 14:21 - pre 226 meseci
@negyxo:
SQL Server 2005 bit ce stvarno revolucionarno izdanje. Pored svega i record versioning engine ce biti dostupan i jos milion drugih stvarcica. Sve u svemu pravi konkurent oracla i db2.

@mkaras:
Covek je explicitno trazio resenje za SQL Server koje je i dobio sa konkretnim primerom, koje si uzput ti samo teoretski ponovo opisao. Svaka baza si ima svoje specifike i najbolja univerzalna resenja ne postoje. Covek nije trazio teoriju ni filozofiju vec resenje.
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

mkaras
Marko Karas
Beograd

Član broj: 66087
Poruke: 427



+19 Profil

icon Re: Kako postaviti rows brojaī da izlazi kao rezultat SQL query?20.09.2005. u 21:50 - pre 226 meseci
@Riste Pejov

Molim te da objasnis na osnovu cega si zakljucio da covek trazi

resenje za MS SQL a ne za Sybase? Oba sistema su pomenuta u pitanju.


16.06.2005 si pisao


Citat:

Prvo ... uzmete tabelu sa Personalom

....

Onda uradite temp tabelu koja ce cuvati Redne brojeve ...


Sada je sasvim uredu napraviti temp tabelu. Zasto?

Zasto samo Redni brojevi u posebnu temp tabelu?


Citat:

....

Napunite tabelu sa parovima RedniBr + LK...



Zasto je puniti parovima RedniBr + LK ?


Citat:

....

Uzmite podatke za prikaz u aplikaciji ili gde god zelite ....

....

Otarasite se temp tabele ...

....



a 19.09.2005 si pisao


Citat:

...

Zato sto kad se radi o velikim tabelama i razlicitim kriteriuma sortiranja, temp tabele mogu ugusiti server.



Za tri dana si promenio misljenje o temp tabelama. Zasto?


Citat:

...

Na kraju ... za SQL Servera .. valjda ce ti biti najjeftinije da rownum presmetas kod klijenta ....



Stvarno ne mogu da shvatim sta si time hteo da kazes.


Pokusaj da objasnis jer vrsio sam merenja oba sitema rada i tvoj

sistem nije brzi, ni MS SQL ni na Interbase sistemu a ni na MySQL

sistemu.
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.208.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Kako postaviti rows brojač da izlazi kao rezultat SQL query?21.09.2005. u 08:06 - pre 226 meseci
@mkaras
Daj citaj poruke do kraja, izgleda imas problema citanjem poruka drugih korisnika nego samo selektivno citas ono sto tebi odgovara izvan konteksta.

Nekada kad porastes i imas server sa 100-tinu konkurentnih korisnika videces kako resenje rednog broja sa temp tabelama lako ugusi server.

Ako zelis produziti diskusiju otvori temu u forumu advocacy pa cemo tamo da nastavimo, DB forum nije mesto za prepucavanje.
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

[es] :: Baze podataka :: Kako postaviti rows brojač da izlazi kao rezultat SQL query?

[ Pregleda: 5224 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.