Union ve Order

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Union ve Order

Mesaj gönderen m_ekici »

s.a.
Naile "union kullanılırken order by sadece en son cümlenin en sonuna yazılarak kullanılır." olarak yazmıştı fakat benim kullanmam lazım... Aşağıdaki kodda en yakın tek kaydı almam lazım (6.satırda).. Nasıl yaparım?

Kod: Tümünü seç

SELECT 0 AS TUR,'Boşta' AS TURACK,ARAC.MARKA,ARAC.CINSI,MUS.ADISOYADI,KIRA.A1PLAKA,KIRA.A2PLAKA,KIRA.GRUP,KIRA.SOZLESMENO,KIRA.TARIH,
KIRA.CIKTAR,KIRA.CIKSAAT,KIRA.BEKTAR,KIRA.BEKSAAT,KIRA.DONTAR,KIRA.DONSAAT,KIRA.A1CIKKM,KIRA.A1CIKBEN,
KIRA.A1DONKM,KIRA.DONOFIS,KIRA.A1DONBEN,KIRA.BEKOFIS
FROM INF6_ARAC ARAC
LEFT JOIN INF6_KIRA KIRA 
ON KIRA.SOZLESMENO=(SELECT TOP 1 SOZLESMENO FROM INF6_KIRA WHERE DONTAR<=CONVERT(DATETIME, '2007.11.20 23:59:59', 102) AND A1PLAKA=ARAC.PLK ORDER BY DONTAR DESC)

LEFT JOIN INF6_MUSTERI MUS ON MUSNO = MUS.AKNO
WHERE FAAL=0 AND PLK NOT IN (SELECT A1PLAKA FROM INF6_KIRA
WHERE (DONTAR Between CONVERT(DATETIME, '2007.11.20 00:00:00', 102) and CONVERT(DATETIME, '2007.11.20 23:59:59', 102))
 OR (CIKTAR Between CONVERT(DATETIME, '2007.11.20 00:00:00', 102) and CONVERT(DATETIME, '2007.11.20 23:59:59', 102))
 OR CIKTAR<CONVERT(DATETIME, '2007.11.20 00:00:00', 102)
AND (DONTAR>CONVERT(DATETIME, '2007.11.20 00:00:00', 102) OR DONTAR IS NULL))
UNION
SELECT 1 AS TUR,'Boşta (D)' AS TURACK,ARAC.MARKA,ARAC.CINSI,MUS.ADISOYADI,KIRA.A1PLAKA,KIRA.A2PLAKA,KIRA.GRUP,KIRA.SOZLESMENO,KIRA.TARIH,KIRA.CIKTAR,KIRA.CIKSAAT,KIRA.BEKTAR,KIRA.BEKSAAT,KIRA.DONTAR,KIRA.DONSAAT,
KIRA.A1CIKKM,KIRA.A1CIKBEN,KIRA.A1DONKM,KIRA.DONOFIS,KIRA.A1DONBEN,KIRA.BEKOFIS FROM INF6_KIRA KIRA
LEFT JOIN INF6_ARAC ARAC ON ARAC.PLK=A1PLAKA
LEFT JOIN INF6_MUSTERI MUS ON MUSNO = MUS.AKNO
WHERE DONTAR Between CONVERT(DATETIME, '2007.11.20 00:00:00', 102) and CONVERT(DATETIME, '2007.11.20 23:59:59', 102)
UNION
SELECT 2 AS TUR,'Kirada (Ç)' AS TURACK,ARAC.MARKA,ARAC.CINSI,MUS.ADISOYADI,KIRA.A1PLAKA,KIRA.A2PLAKA,KIRA.GRUP,KIRA.SOZLESMENO,KIRA.TARIH,KIRA.CIKTAR,KIRA.CIKSAAT,KIRA.BEKTAR,KIRA.BEKSAAT,KIRA.DONTAR,KIRA.DONSAAT,
KIRA.A1CIKKM,KIRA.A1CIKBEN,KIRA.A1DONKM,KIRA.DONOFIS,KIRA.A1DONBEN,KIRA.BEKOFIS FROM INF6_KIRA KIRA
LEFT JOIN INF6_ARAC ARAC ON ARAC.PLK=A1PLAKA
LEFT JOIN INF6_MUSTERI MUS ON MUSNO = MUS.AKNO
WHERE CIKTAR Between CONVERT(DATETIME, '2007.11.20 00:00:00', 102) and CONVERT(DATETIME, '2007.11.20 23:59:59', 102)
UNION
SELECT 3 AS TUR,'Kirada' AS TURACK,MUS.ARAC.MARKA,ARAC.CINSI,MUS.ADISOYADI,KIRA.A1PLAKA,KIRA.A2PLAKA,KIRA.GRUP,KIRA.SOZLESMENO,KIRA.TARIH,KIRA.CIKTAR,KIRA.CIKSAAT,KIRA.BEKTAR,KIRA.BEKSAAT,KIRA.DONTAR,KIRA.DONSAAT,
KIRA.A1CIKKM,KIRA.A1CIKBEN,KIRA.A1DONKM,KIRA.DONOFIS,KIRA.A1DONBEN,KIRA.BEKOFIS FROM INF6_KIRA KIRA
LEFT JOIN INF6_MUSTERI MUS ON MUSNO = MUS.AKNO
WHERE CIKTAR<CONVERT(DATETIME, '2007.11.20 00:00:00', 102)  AND (DONTAR>CONVERT(DATETIME, '2007.11.20 00:00:00', 102)  OR DONTAR IS NULL) 
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

DONTAR için Max kullanabilirsin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

Kod: Tümünü seç

SELECT TOP 1 SOZLESMENO FROM INF6_KIRA WHERE DONTAR<=CONVERT(DATETIME, '2007.11.20 23:59:59', 102) AND A1PLAKA=ARAC.PLK ORDER BY DONTAR DESC
En büyük Dönüş tarihine sahip sozleşmenin numarası lazım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Kod: Tümünü seç

SELECT TOP 1 SOZLESMENO FROM INF6_KIRA WHERE DONTAR<=CONVERT(DATETIME, '2007.11.20 23:59:59', 102) AND A1PLAKA=ARAC.PLK and dontar=max(dontar) 
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Sanırım şart içinde order by kullanılınca çalıştı. İlginçtir yaptığım testte benzeri bir sorgu yazdım ve order by şartına göre sonuç düşündüğüm gibi geldi. Örn:

Kod: Tümünü seç

select * from ilce where ilkod in (select top 1 kod from il)
sorgusu ile Adana ilçeleri geldi fakat

Kod: Tümünü seç

select * from ilce where ilkod in (select top 1 kod from il order by iladi desc)
sorgusu ile zonguldak ilçeleri geldi. Hala şoktayım :wink:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Hoca,
il adına desc demişsiniz. son harf Z olduğu için zonguldak, adana da ilk olduğu için adana gelmesi normal gibi geliyor mantığıma :roll:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

İlginç olanın order by'ın sorgu şartı içerisinde kullanılabilirliği. Bu hiç kullanmadığım bir bilgiydi. Aslında Zonguldak ilçelerinin gelmesi tam beklediğim sonuçtu hiç şaşırmadım ama şart içinde order by desteği beni şaşırttı.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Benimde kullandığım şekiller var.

Kod: Tümünü seç

(SELECT TOP 1 STHAR_GCMIK FROM TBLSTHAR A WHERE TBLSTHAR.STOK_KODU=A.STOK_KODU AND STHAR_HTUR IN ('H','J') AND STHAR_GCKOD='g' ORDER BY STHAR_TARIH DESC),
son giren miktar.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

sabanakman yazdı:İlginç olanın order by'ın sorgu şartı içerisinde kullanılabilirliği. Bu hiç kullanmadığım bir bilgiydi. Aslında Zonguldak ilçelerinin gelmesi tam beklediğim sonuçtu hiç şaşırmadım ama şart içinde order by desteği beni şaşırttı.

Şaşacak bir durum olmaması lazım Şaban hocam çünkü iç sorgu iki parantez arasında yazılıyor ve şunları yapabilirsin bunları da yapamazsın diye bir şey duymadım okumadım :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Union ve Order

Mesaj gönderen sabanakman »

m_ekici yazdı:s.a.
Naile "union kullanılırken order by sadece en son cümlenin en sonuna yazılarak kullanılır." olarak yazmıştı fakat benim kullanmam lazım...
Bende buna istinaden zihnimde oluşan yanlış şema yüzünden şart içi order by'a hiç bulaşmadımdı ama zamanla öğreniyor insan. Ayrıca şart içi order by sanıyorum sadece Top 1 gibi sorgularda geçerli. Ayrıca ben Top 1 şeklinde de sorgu şartı yazma ihtiyacım olmadı. Bunun da etkisi olabilir. :wink:
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla