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

Odpowiedz Nowy wątek
2015-01-15 20:10
Kawior
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

Pozostało 580 znaków

2015-01-15 20:29
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

Pozostało 580 znaków

2015-01-15 20:52
Kawior
0

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

Pozostało 580 znaków

2015-01-15 21:36
0

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

Pozostało 580 znaków

2015-01-15 21:53
Kawior
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!!

Pozostało 580 znaków

2015-01-15 22:21
Kawior
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

Pozostało 580 znaków

2015-01-16 07:12
0

Wklej na sqlfiddle kawalek danych.

Pozostało 580 znaków

2015-01-16 08:38
0

a może tak ....

select 
  KOL1,
      case 
         when count(*) > 1 then 1
         else 0
      end as kol2  
FROM 
  TABLE group  by kol1
edytowany 1x, ostatnio: grzegorz_so, 2015-01-16 08:39

Pozostało 580 znaków

2015-01-16 09:28
Kawior
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.

Pozostało 580 znaków

2015-01-16 09:36
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.

Pozostało 580 znaków

2015-01-16 10:00
0

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

mnie jest wszystko jedno - Marcin.Miga 2015-01-16 10:48

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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