Wyciągnięcie z podzapytania do zapytania
Przemek - 24-07-2007 00:12
Wyciągnięcie z podzapytania do zapytania
Witam. Posluguje sie MS SQL Server. Zdefiniowalem sobie takie zapytanie zawierajace podzapytanie i chce, zeby w tabeli wynikowej pojawiala mi sie tez kolumna Ile. Problem w tym, ze przy wykonaniu pojawia sie blad. Jak wyciagnac COUNT do zapytania glownego?
SELECT Ile, * FROM Klienci k1 WHERE ((SELECT COUNT(*) AS Ile FROM Klienci k2 WHERE k2.Klient_nadrzedny = k1.Klient) > 0)
-- Przemek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Pawel Potasinski - 24-07-2007 00:12
SELECT COUNT(k2.*) Ile, k1.<tu_wypisz_potrzebne_kolumny_z_k1> FROM dbo.Klienci k1 INNER JOIN dbo.Klienci k2 ON k2.Klient_nadrzedny = k1.Klient GROUP BY <tu_wypisz_potrzebne_kolumny_z_k1>
W Twojej wersji też można to wyświetlić:
SELECT (SELECT COUNT(*) AS Ile FROM Klienci k2 WHERE k2.Klient_nadrzedny = k1.Klient) Ile, k1.* FROM Klienci k1 WHERE ((SELECT COUNT(*) AS Ile FROM Klienci k2 WHERE k2.Klient_nadrzedny = k1.Klient) > 0)
-- Pozdrawiam Paweł Potasiński
Użytkownik "Przemek" <mixermannWYTNIJTO@poczta.onet.pl> napisał w wiadomości news:7af7.00000090.46a49513@newsgate.onet.pl... > Witam. Posluguje sie MS SQL Server. Zdefiniowalem sobie takie zapytanie > zawierajace podzapytanie i chce, zeby w tabeli wynikowej pojawiala mi sie > tez > kolumna Ile. Problem w tym, ze przy wykonaniu pojawia sie blad. Jak > wyciagnac > COUNT do zapytania glownego? > > SELECT Ile, * > FROM Klienci k1 > WHERE ((SELECT COUNT(*) AS Ile > FROM Klienci k2 > WHERE k2.Klient_nadrzedny = k1.Klient) > > 0) > > -- > Przemek > > > -- > Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Przemek - 27-07-2007 00:01
Dzieki. Zastosowalem jedno z podanych rozwiazan, choc myslalem, ze da sie jakos uniknac dublowania zapytania. W miedzyczasie powstal kolejny problem. Mam tabele, w ktorej kolumna z PK to zwykly numer od 1 w gore (powiedzmy do 5000), ale nie jest zachowana ciaglosc tej numeracji. Jak skonstruowac takie zapytanie, ktore pokaze mi, ktorych numerow w podanej kolumnie dla zadanego zakresu brakuje?
-- Przemek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Hubert - 27-07-2007 00:01
Przemek wrote: > Dzieki. Zastosowalem jedno z podanych rozwiazan, choc myslalem, ze da sie jakos > uniknac dublowania zapytania. > W miedzyczasie powstal kolejny problem. Mam tabele, w ktorej kolumna z PK to > zwykly numer od 1 w gore (powiedzmy do 5000), ale nie jest zachowana ciaglosc > tej numeracji. Jak skonstruowac takie zapytanie, ktore pokaze mi, ktorych > numerow w podanej kolumnie dla zadanego zakresu brakuje? > Hmm... Nie wiem czy jest jakiś prosty sposób na wygenerowanie w zapytaniu zbioru intów (co by ułatwiło sprawę). Ale możesz utworzyć tabelę (tymczasowo lub na stałe) z jedną kolumną i wypełnić ją odpowiednim zakresem liczb. Następnie zrobić select na tej pomocniczej tabeli z left join z tabelą która Cię interesuje i szukać wierszy, w których "joinowane" pole przyjmuje wartość null.
Albo zrobić select z "głównej" tabeli UNION select z tabeli pomocniczej i wybrać wiersze, które występują raz (group by + count).
Albo skorzystać z konstrukcji WHERE NOT EXISTS (select....).
Hubert
Borafu - 27-07-2007 00:01
Przemek pisze: > Dzieki. Zastosowalem jedno z podanych rozwiazan, choc myslalem, ze da sie jakos > uniknac dublowania zapytania. > W miedzyczasie powstal kolejny problem. Mam tabele, w ktorej kolumna z PK to > zwykly numer od 1 w gore (powiedzmy do 5000), ale nie jest zachowana ciaglosc > tej numeracji. Jak skonstruowac takie zapytanie, ktore pokaze mi, ktorych > numerow w podanej kolumnie dla zadanego zakresu brakuje?
Tak lekko OT. W jakim celu potrzebne Ci luki w numeracji PK? Będziesz dodawał nowe zapisy z wykorzystaniem tych brakujących numerów? -- Borafu
Przemek - 27-07-2007 00:01
> W jakim celu potrzebne Ci luki w numeracji PK? > Będziesz dodawał nowe zapisy z wykorzystaniem tych brakujących numerów?
Do statystyki, w jakich okresach ludzie kasowali rekordy, a potem moze do wypelnienia dziur. Zobaczy sie.
-- Przemek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Przemek - 27-07-2007 00:01
> Hmm... Nie wiem czy jest jakiś prosty sposób na wygenerowanie w > zapytaniu zbioru intów (co by ułatwiło sprawę). Ale możesz utworzyć > tabelę (tymczasowo lub na stałe) z jedną kolumną i wypełnić ją
Tez tak myslalem. I ze mozna jakos wykorzystac operator BETWEEN AND, ale nie wiem jak taki generator zrobic.
> odpowiednim zakresem liczb. > Albo zrobić select z "głównej" tabeli UNION select z tabeli pomocniczej > i wybrać wiersze, które występują raz (group by + count).
Moze lepiej tabela pomocnicza MINUS tabela glowna?
> Albo skorzystać z konstrukcji WHERE NOT EXISTS (select....).
Tez moze i mozna.
-- Przemek
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
szaman - 31-07-2007 00:01
Przemek pisze: >> W jakim celu potrzebne Ci luki w numeracji PK? >> Będziesz dodawał nowe zapisy z wykorzystaniem tych brakujących numerów? > > Do statystyki, w jakich okresach ludzie kasowali rekordy, a potem moze do > wypelnienia dziur. Zobaczy sie. > Jeżeli do statystyki to chyba nie od tej strony zaczynasz - naturalniejszym i łatwiejszym będzie zacząć od tych "okresów" \i po problemie.
Co do dziur w numeracji to stary "problem" ale nie z tymi dziurami tylko z ludźmi, którym tak ich żal i próbują coś z nimi zrobić.
Według mnie to kutwy ;-)
żałują numerka jak by im mało ich jeszcze zostało :-) ..
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
[sql][pgsql] zapytanie sql
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|