Sub query kurma

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ı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Sub query kurma

Mesaj gönderen a.mikayil »

Arkadaşlar, benim INVOICE ve DOCTORS isimlı iki tablom var.

INVOICE
INVDATE(Invoice tarihi)
DRID(Doktorun IDsi)
ves....


DOCTORS
DRID(Doktorun IDsi)
DAYLIMIT(En fazla kaç gün ilaç yazmaya bilir)
DRNAME(İsmi)

Anlayacağınız gibi INVOICE.DRID=DOCTORS.DRID. Şimdi ben varsa hiç ilaç yazmayan (ki, bu zaman INVOICE tablosunda hiç ilaç tayin etmemiş doktorun IDsi olmayacak) ve en son ilaç tayin etdiği tarih GETDATE()-DAYLIMIT'ten küçük yada eşit olan doktorların ismini listelemek istiyorum.Bunun için ne yapmam gerek? Sub query kullanmaya gerek var mı?
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Sub query kurma

Mesaj gönderen conari »

SELECT * FROM DOCTORS
WHERE not EXISTS (SELECT * FROM INVOICE WHERE INVOICE.DRID=DOCTORS.DRID )

invoice tablosunda olmayan doctorlar.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Re: Sub query kurma

Mesaj gönderen a.mikayil »

Teşekkür ederim. Ama esas olan her iki koşulu sağlayan Query.Aslında Invoıce tablosunda olmayan doktorları başka bir yolla da alabiliyorum.Ama aynı zamanda da uzun zamandır Invoıce yazmamış olan doktorların da listesini çıkarmak istiyorum.
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Sub query kurma

Mesaj gönderen Battosai »

Kod: Tümünü seç

SELECT  doctors.*,invoice.*  FROM DOCTORS LEFT JOIN invoice on doctors.drid=invoice.drid where invoice.invdate-getdate()>doctors.daylimit
where den sonraki karşılaştırma kısmını sen düzenle yazdığım hali ile doğru sonuç vermeyebilir işin mantığını anla diye yazdım.
Kullanıcı avatarı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Re: Sub query kurma

Mesaj gönderen a.mikayil »

Ben yazıyorum:
SELECT DR.DRNAME FROM DOCTORS DR LEFT JOIN INVOICE INV ON DR.DRID=INV.DRID WHERE (INV.DRID IS NULL) OR (MAX(INV.INVDATE)<=GETDATE()-DR.DAYLIMIT)
Demek istediğim ben aynı anda 2 koşula uygun query çalıştırmak istiyorum. Ama mealen diyor ki, Where kısmında MAX kullanılamaz (bunu için HAVING clause ya da SUB Query kullanman lazım).Ben o yüzden bu sub query'yı nasıl kuracağımı soruyorum
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Sub query kurma

Mesaj gönderen Battosai »

Kod: Tümünü seç

SELECT doctors.DRNAME,MAX(inv.INVDATE) as Son_Kayit FROM INVOICE INV LEFT JOIN DOCTORS DR ON DR.DRID=INV.DRID  having   MAX(INV.INVDATE)<=(GETDATE()-DR.DAYLIMIT)
Bunu bir deneyin...
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: Sub query kurma

Mesaj gönderen sabanakman »

Kod: Tümünü seç

select * from DOCTORS as d
left join (select DRID, max(INVDATE) as INVDATE from INVOICE group by DRID) as i on i.DRID=d.DRID
where i.DRID is Null or (GetDate()-i.INVDATE>d.DAYLIMIT)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Re: Sub query kurma

Mesaj gönderen a.mikayil »

Hepinize teşekkürler, özellikle de sabanakman kardeşimize. Önerdiğiniz query'yle mesele hall oldu.
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Cevapla