» »

[sql]-stevilka vrstic

[sql]-stevilka vrstic

billgates ::

V šoli imam nalogo narediti v t-sql stolpec (column) v tabeli employees, da bo izpisalo številko vrstice(1,2,3,...). Ta se ne sme spremeniti v nobenem primeru (če dam ASC, DESC). Kako bi se to dalo rešiti z alter table?

destiny ::

Torej hočeš met vedno pri nekem employee-u isto številko ali hočeš met vedno 1 na vrhu, ne glede na to kako je tabela urejena?

billgates ::

1 vedno na vrhu

destiny ::

hm, prva stvar ki mi pride na pamet je dense_rank funkcija, ki bi imela isti sort kot glavni order by + unique id, ne podpirajo pa tega vsi database pogoni... npr. mssql server ma to šele od 2005 naprej.

billgates ::

Morda za začetek samo kako bi mi izpisalo vrstico (asc,desc ni važno). Zaenkrat imam:

ALTER TABLE employees
ADD Stevilke INT

destiny ::

s tem ne boš nič dosegel. Fizično polje ti tu ne bo pomagalo. Ti rabiš nek virtual column...

billgates ::

Kaj pa kurzor?

destiny ::

jest bi napisal nekaj v stilu:

select dense_rank() over (order by MojŽeljeniOrder,employeeid) rnk, employeeid,name,... from employees order by MojŽeljeniOrder


Edit: order by v ranku more met zraven še unique id, da bo kazal pravilno, če osnovni order nima unique identifikatorja

Zgodovina sprememb…

  • spremenil: destiny ()

borchi ::

če se ne motim imaš dense_rank(), row_number()... samo od sql 2005 navzgor...
l'jga

destiny ::

ja sej to sem mu že prej napisal, s tem da oracle nima row_number(), ima pa rownum. dense_rank podpirata oba, tako oracle kot mssql server 2005 + novejši

borchi ::

ah, vidim zdaj. sori, sem spregledal...

@billgates: kaj pomeni, da se "ne sme spremeniti v nobenem primeru (če dam ASC, DESC)"? a da mora bit prva vrstica v resultset-u vedno 1, druga 2 itd.?
l'jga

billgates ::

ah, vidim zdaj. sori, sem spregledal...

@billgates: kaj pomeni, da se "ne sme spremeniti v nobenem primeru (če dam ASC, DESC)"? a da mora bit prva vrstica v resultset-u vedno 1, druga 2 itd.?

Da, točno tako.

bmandl ::

To je nekaj podobnega, kar ti želiš. Preuredi tako, da bo ZapSt neodvisna od tabele...
ALTER TABLE Orders
ADD SodoLiho char(4)



DECLARE @ZapSt int
SET @ZapSt = 1
DECLARE @id int


DECLARE kurzor CURSOR FOR
SELECT OrderID FROM Orders

OPEN kurzor

	FETCH NEXT FROM kurzor INTO @id
	
	WHILE (@@FETCH_STATUS = 0)
	BEGIN
		UPDATE Orders
		SET ZapSt = @ZapSt
		WHERE @id = OrderID
		
		SET @ZapSt = @ZapSt + 1
		FETCH NEXT FROM kurzor INTO @id
	END

CLOSE kurzor
DEALLOCATE kurzor


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL vprašanje

Oddelek: Programiranje
81121 (720) MrStein
»

Siol uvaja digitalno kabelsko televizijo na optiki (strani: 1 2 3 )

Oddelek: Omrežja in internet
11423713 (9100) alexz
»

Nakup namiznega računalnika

Oddelek: Kaj kupiti
181614 (1343) kerco46
»

Pomoč nastavitev UTMS modema T-2 Partis

Oddelek: Pomoč in nasveti
71421 (1314) KoMar-
»

anketa z vec moznostmi

Oddelek: Izdelava spletišč
121648 (1527) Packač

Več podobnih tem