Podzapytania - Dwie kolumny

0

Witam

Mam następujące pytanie czy istnieje możliwość lub jakaś sprytna sztuczka aby za pomocą jednego podzapytania wyciągnąć dwie kolumny?? bo tak to muszę robić dwa identyczne podzapytania aby wyciągać każda kolumnę z osobna a co za tym idzie wydłuża się czas zapytania.

Chodzi mi o bazy MS sql MY SQL,

z Góry dzięki za odpowiedzi i rady

0
select kolumna1, kolumna2 from tabela
0

CHodzi od podzapytanie czyli np. Month(data) In (Select cos tam cos tam) tylko zeby Od razu porownac rok a nie robic drugiego podzapytania dla roku

0

Nie ma takiej mozliwosci o ile wiem.

0

Nie jestem pewien czy zrozumiałem pytanie...
Chcesz wybrać zarówno po roku jak i miesiącu?

select * from table1 t1
where concat(year(t1.data), month(t1.data) in
(select concat(year(t2.data), month(t2.data) from table2 t2
where warunki dla tabeli w podzapytaniu)

Albo (w przykładzie data w formacie 'yyyy-mm-dd')

select * from table1 t1
where left(t1.data, 8) in
(select left(t2.data, 8) from table2 t2
where warunki dla tabeli 2)

Albo sprecyzuj problem ;)

0

O ile ja zrozumialem autorowi chodzi o to, zeby zamiast:

select a,b from tabela where c in (select c from ...) and d in (select d from )

dac

select a,b from tabela where c, d in (select c, d from ...)

czyli z jednym podzapytaniem

0
johny_bravo napisał(a)

O ile ja zrozumialem autorowi chodzi o to, zeby zamiast:

select a,b from tabela 
where c in (select c from ...) // pierwsze podzapytanie
and d in (select d from ) // drugie podzapytanie

I to samo masz zrealizowane przez concat, oczywiście jeśli oba podzapytania dotyczą tej samej tabeli...

Tak jakoś mi to wychodzi z jego tekstów, że chce wybierać po miesiącu i jednocześnie po roku.... wtedy wystarczy dla warunku odrzucić dzień miesiąca i masz również w jednym podzapytaniu...

Koncepcja

 SELECT a,b FROM tabela WHERE c, d IN (SELECT c, d FROM ...)

odpowiada przecież dokładnie

 SELECT a,b FROM tabela WHERE CONCAT(c, d) IN (SELECT CONCAT(c, d) FROM ...)

tyle że ta pierwsza jest niemożliwa, ta druga całkowicie poprawna...

Jeśli zaś dla warunku miesiąc chce pobierać z jednej tabeli, a rok z innej, to faktycznie się nie da, a samo pytanie o to jest nieco bez sensu...

Jednym słowem, nie ma to jak precyzyjnie zadane pytanie ;)

0

witam,
lacze sie z sql serverem 2005 przez ADO
Gdy proboje uzyc funkcji CONCAT(xx, yy), wywala blad
"Concat is not a recognized bulid-in function name".
Jakas rada, bo czytam, szukam i nie wiem o co chdozi.
pozdrawiam
dzieki

0

W MSSQL wystarczy +

0

pewnie ze jest.
Sory za glupie pytanie.
Ale mam inne:
Jak zformatowac liczbe przy konwersji na string a konkretnie mi chodzi o to, ze wyciagam sobie sume kwot z jakiegos miesiaca:

select sum(kwota) as suma,
(convert(nvarchar(4),year(data)) +'-'+convert(nvarchar(2),month(data))) as miesiac
from wplaty
group by (convert(nvarchar(4),year(data))+'-'+convert(nvarchar(2),month(data)))
order by miesiac

tylko problem sie pojawia przy sortowaniu. Miesiac 2006-11 bedzie przed miesiacem 2006-2.
Wiec czy jest funkcja aby wyswietlic 2006-02??

pozdrawiam

0
case when month(data) < 10 then '0'+month(data) else month(data) end

Dla ulatwienia mozesz sobie napisac funkcje :)

0

super, dzieki.
Jeszcze musze sobie w wolnym czasie troche poczytac o samym sql.

Ale nastepny problem komponent dbchar nie widzi tego pola. Jakies pomysly?

0

Ktorego pola?

0

No tego co ma zwracac. W zasadzie to jest alias.
Jak tam do serii wybieram pole do osi x i do osi y to tego nie znajduje.

Nie wiem co poradzic na to.

0

Nie bardzo rozumiem... Jak teraz wyglada zapytanie i jak sie dobierasz do wyniku? Podaj konkretny kod, bo nie ma sensu zgadywac.

0

kurcze zostawilem laptopa gdzie indziej.
ale to mniej wiecej tak

select sum(kwota) as suma, 
(convert(nvarchar(4),year(data))+
case when month(DATA) < 10 then '0'+convert(nvarchar(2),month(DATA)) else convert(nvarchar(2),month(DATA)) end) as miesiac
group by (convert(nvarchar(4),year(data))+
case when month(DATA) < 10 then '0'+convert(nvarchar(2),month(DATA)) else convert(nvarchar(2),month(DATA)) end)

wiem ze funkcja by ladniej wygladala ale najpierw chce aby dzialalo.
I teraz w gridzie normalnie mam pola suma i pole miesiac.
Z kolei ja wybieram kolumny w dbchart mam tylko do wyboru suma. Probowalem wpisywac nazwe recznie ale to na nic.

0

A gdy nie bylo case ... end, to pole miesiac bylo? Zapytanie wyglada ok, wiec nie wiem gdzie przyczyna za bardzo...

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