Wypisanie rankingu w dodatkowej kolumnie - Select zagnieższony.

0

Witam.

Mam taką tabelę ''Tabela" w której są dwie kolumny: "Firma", "Zysk"
Mam do tabeli wprowadzone takie dane:
Afirma - 100
Bfirma - 50
Cfirma - 50
Dfirma - 20

Teraz potrzebuję dodać ranking generowany automatycznie w trzeciej kolumnie gdzie firma "Bfirma" i "Cfirma" jest egzekfo na drugim miejscu.

Zadanie mam zrobić w oparciu o dwie instrukcje Select gdzie jedna jest zagnieżdzona w drugiej.

1

Można to zrobic za pomocą funkcji rankingujących(window), ale one dla ex-equo źle działają... :)
Masz zrobić to w prawidłowy sposób, czyli coś w tren deseń:

SELECT *, (SELECT Count(*)+1 FROM tabela x WHERE x.zysk>t.zysk) FROM tabela t 
0

http://sqlfiddle.com/#!18/6d0b0e/9

Jestem w szoku że to działa.
Ja próbowałem z declare @zmienna i potem w pętli case jakoś inkrementować tą wartość i wyświetlać, a to takie proste.

Dziękuję bardzo.

0

Mam jeszcze jedno ostatnie zadanie:
http://sqlfiddle.com/#!18/cb984

Napisać instrukcję która z tabeli pobierze rekordy, których kosztDostawy będzie większy od kwoty z poprzedniej dostawy dla danego dostawcy.

  • pierwsza dostawa jako że nie ma poprzednika przechodzi dalej.
0

Prawie tak samo, ale albo LIMIT (którego nie lubię), albo podwójnie zagnieżdżony SELECT. I to we WHERE... :)

0

A mógłbyś mi napisać jak to zrobić? Komendy LIMIT nie znam i coś mi niezbyt chce działać. Wolę chyba podwójne niezagnieżdżenie SELECT w WHERE, tylko jak wyłuskać takie porównanie do tylko do jednej wcześniej występującej wartości u konkretnego dostawcy.

Sam umiem napisać tylko tyle:


select * from Tabela T
where T.kosztDostawy>(select KosztDostawy 
                     from Tabela K 
                     Where T.idDostawcy=K.IdDostawcy)

0

Na podstawie takich danych nie da się tego wykonać. Nie da się tego wykonać prawidłowo i dobrze, bo jakoś by się dało...
A w MS SQL nie ma LIMIT - jest TOP. :)

EDIT: Ale dla takich danych już się da... http://sqlfiddle.com/#!18/c519f/2

0

Chyba rozumiem. Gdybym miał jeszcze datę transakcji, to wtedy bym mógł wyświetlić kwotę najbliższą wcześniejszą przy pomocy TOP 1 i ORDER BY, wtedy bym mógł zrobić porównanie, a tak to lipa. Jutro dodam jakieś daty i spróbuję to napisać.

0

Wymodziłem coś takiego. Wynik odpowiada w 100 % moim wymaganiom

http://sqlfiddle.com/#!18/5eca7/1

1 użytkowników online, w tym zalogowanych: 0, gości: 1