Wybierz jeden z dwóch istniejących rekordów w zapytaniu sql

0

Jako nowy użytkownik witam i pozdrawiam wszystkich forumowiczów.
Mam problem z wybraniem jednego z rekordów z poniższej tabeli:
Kol1 Kol2 Kol3
2009 0 500
2010 0 600
2010 1 650
2011 0 40
2011 1 50
2012 0 100
tak abym otrzymał rekordy z wartością 1 w kolumnie 2, ale tylko w przypadku gdy wartości z kolumny 1 są zdublowane.
Czyli zapytanie ma sprawdzić czy dla danego roku istnieje rekord z wartością 1 i jeśli istnieje pokazać tylko ten rekord, a jeśli nie istnieje to pokazać rekord w wartością 0 w kolumnie 2. Tabela którą chciałbym uzyskać powinna wyglądać jak poniżej:
Kol1 Kol2 Kol3
2009 0 500
2010 1 650
2011 1 50
2012 0 100

Bardzo będę wdzięczny za pomoc.

Kawior

0
SELECT t.* FROM tabela t JOIN (SELECT Kol1, Max(Kol2) Kol2 FROM tabela GROUP BY Kol1) x ON x.Kol1=t.Kol1 AND x.Kol2=t.kol2
0

Dzięki za odpowiedź, ale Twoje zapytanie wyrzuca tylko rekordy z wartością 1 w kol2

0

Weź nie wkurzaj...
http://sqlfiddle.com/#!2/ebc81/1

0

No i tu wychodzi moja niska znajomość tematu. Nie napisałem na początku, że tabela pochodzi już z joina i jak zaaplikowałem Twój kod to niestety dostaję tyko dwa wiersze. To jest polecenie które niestety daje mi tylko dwa rekordy z wartością 1 w kolumnie 2, a powinno ich być od 2009 roku 6 (4 z wartościa 0, a 2 z wartością 1). Może to jest kwestia joina, a może sql2008R2. A może jeszcze dodatkowego where na końcu, albo mój join nie jest w tym miejscu co powinien.
SELECT t.Dkn_RokMiesiac, t.DkN_Numer, d.Dke_WartoscL
FROM cdn.deklnag t join cdn.deklelem d on d.DkE_DkNID = t.DkN_DkNID
JOIN (SELECT Dkn_RokMiesiac, MAX(DkN_Numer) DkN_Numer
FROM cdn.deklnag GROUP BY Dkn_RokMiesiac) x ON x.Dkn_RokMiesiac=t.Dkn_RokMiesiac AND x.DkN_Numer=t.DkN_Numer
where t.dkn_typdeklar = 17 and d.Dke_Numer = 251038

Absolutnie nie mam zamiaru Cię wkurzać i please help!!

0

Ale jak robię Twoje zapytanie tylko na jednej tabeli to też daje mi tylko dwa rekordy. Prawdopodobnie przez tego where na końcu.
SELECT t.Dkn_RokMiesiac, t.DkN_Numer, t.dkn_TypDeklar
FROM cdn.deklnag t
JOIN (SELECT Dkn_RokMiesiac, MAX(DkN_Numer) DkN_Numer
FROM cdn.deklnag GROUP BY Dkn_RokMiesiac) x ON x.Dkn_RokMiesiac=t.Dkn_RokMiesiac AND x.DkN_Numer=t.DkN_Numer
where t.dkn_typdeklar = 17
Dkn_RokMiesiac DkN_Numer dkn_TypDeklar
201012 1 17
201112 1 17
a powinieniem dostać
Dkn_RokMiesiac DkN_Numer Dkn_typdeklar
200912 0 17
201012 0 17
201012 1 17
201112 0 17
201112 1 17
201212 0 17
201312 0 17

Pomóż please!
201412 0 17
jak zapytam wprost
select Dkn_RokMiesiac, DkN_Numer, Dkn_typdeklar
from cdn.deklnag
where dkn_typdeklar = 17

0

Wklej na sqlfiddle kawalek danych.

0

a może tak ....

select 
  KOL1,
      case 
         when count(*) > 1 then 1
         else 0
      end as kol2  
FROM 
  TABLE group  by kol1
0

Marcin, chętnie bym to zrobił ale nie bardzo wiem jak? Gdzie mogę znaleźć instrukcję jak to zrobić?
I dzięki za zainteresowanie się tematem.

0

Wejdz na sqlfiddle.com
wybierz rodzaj serwera.
W swojej bazie zaznacz interewsesujace cie rekordy i w jakis sposob skopiuj do pamieci.
Nastepnie na sqlfiddle wybierz "Text to DDL" i w tym okieknu wklej te rekordy. Zrob "Append to DDL" a nastepnie "Build Schema".
Potem skopiuj linka do strony i wklej tu.

0

A czy mógłbyś jeszcze doprecyzować czy chcesz dane z wyniku joina czy każdą tabelę z osobna?

0

Pierwsza tabela DekNag wg zapytania:
select *
from cdn.deklnag
where dkn_typdeklar = 17

http://www.sqlfiddle.com/#!3

NIe mogłem zrobić buil schema bo dostałem jakiś błąd "Schema Creation Failed: Incorrect syntax near 'DekNag'.: "

Drugą tabelę jak robię append to ddl to dostaję taki error:
ERROR! Line 1 does not have the same number of columns as the header, based on separator "/\t+/"

Spróbuję jeszcze zrobić joina i ci wysłać.
No niestety przy joinie jest ten sam error jak daję Apend to ddl

Czy mogę Ci przysłać dane na maila np w excelu?

Udało się zrobić pierwszą tabele, ale to nic nie da.
http://www.sqlfiddle.com/#!3/db190

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