Sql Cümlesi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Sql Cümlesi

Mesaj gönderen bgoktas »

tablom;

Kod: Tümünü seç

sicil                      tarih       giriş   çıkış
------------------------------------------------
 0001                    01.01     08:00 18:00
 0001                    02.01     08:00 19:00
 0001                    05.01     08:00 19:00
 0002                    01.01     09:00 20:00 
 0002                    03.01     11:00 21:00
gibi bir tabloda 01.01 ile 05.01 arasında giriş çıkışları çekmek istersem, şu sonucu elde etmek istiyorum.

Kod: Tümünü seç

 sicil                      tarih       giriş   çıkış
------------------------------------------------
 0001                    01.01     08:00 18:00
 0001                    02.01     08:00 19:00
 0001                    03.01     --:--   --:--
 0001                    04.01     --:--   --:--
 0001                    05.01     08:00 19:00

 0002                    01.01     09:00 20:00 
 0002                    02.01     --:--   --:--
 0002                    03.01     11:00 21:00
 0002                    04.01     --:--   --:--
 0002                    05.01     --:--   --:--
meseleyi anlatabildim umarım. bunu select ile yapabilirmiyim acaba ,
Not:Seminerde bu tarz bir konuşmada Fahrettin abi ikinci bir tableye
bütün takvimi oluşturup join etmemi söylemişti, tek sicilde sorun yok
fakat birden fazla kişinin raporunu aldığımda olmadı

takvim tablosu;

Kod: Tümünü seç

tarih

01.01
02.01
03.01
04.01
05.01
....
....
31.12  
şimdiden teşekkürler...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Neden olmadığını anlamadım açıkcası...
Tarihler ile yapılacak join'de kartezyen çarpım olacağı için her sicil için bütün tarihler seçilecektir...
order by sicil, tarih demek yeterli olmalı gibime geliyor...
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Kartezyen çarpımını deneyeceğim..
Teşekkürler...
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Benim anladığım kadarıyla tek bir tablo üzerinde işlenmemiş zaman aralığını veri olarak çıktı almak istiyorsunuz ? Bunu Join ile halledileceği kanısında değilim mutlaka işlenecek veri olmalı kanetindeyim.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

tabloların yapısı şu şekilde olursa bir tek sql sorgusu ile istenilen sonuca ulaşılabilir.

Kod: Tümünü seç


GirisCikisTablosu

CIKIS                  GIRIS               SICIL   TARIH
========   ========   =====   ========
30.12.1899 17:00:00   30.12.1899 08:00:00   1       01.01.2004
30.12.1899 17:00:00   30.12.1899 08:00:00   1       01.02.2004
30.12.1899 17:00:00   30.12.1899 08:00:00   2       01.01.2004
30.12.1899 17:00:00   30.12.1899 08:00:00   2       01.03.2004
30.12.1899 17:00:00   30.12.1899 08:00:00   2       01.04.2004



Takvim Tablosu

SICILNO   TARIHLER
=======   ========
1         01.01.2004
1         01.02.2004
1         01.03.2004
1         01.04.2004
2         01.01.2004
2         01.02.2004
2         01.03.2004
2         01.04.2004


select * from takvim t
left join giriscikis g  on(g.sicil = t.sicilno and g.tarih = t.tarihler)


TARIHLER   SICILNO   SICIL   TARIH      GIRIS      CIKIS      
========   =======   =====   ========   ========   ========   
01.01.2004   1         1       01.01.2004   30.12.1899 08:00:00   30.12.1899 17:00:00   
01.02.2004   1         1       01.02.2004   30.12.1899 08:00:00   30.12.1899 17:00:00   
01.03.2004   1         --:--   --:--            --:--                 
01.04.2004   1         --:--   --:--            --:--                
01.01.2004   2         2       01.01.2004   30.12.1899 08:00:00   30.12.1899 17:00:00   
01.02.2004   2         --:--   --:--             --:--              
01.03.2004   2         2       01.03.2004   30.12.1899 08:00:00   30.12.1899 17:00:00   
01.04.2004   2         2       01.04.2004   30.12.1899 08:00:00   30.12.1899 17:00:00   
takvim tablosuna sicilno alanını eklemek pek mantıklı değil ama başka bir yol ben bulamadım...
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Benim anladığım kadarıyla tek bir tablo üzerinde işlenmemiş zaman aralığını veri olarak çıktı almak istiyorsunuz ? Bunu Join ile halledileceği kanısında değilim mutlaka işlenecek veri olmalı kanetindeyim.
Doğru anlamışsınız, fakat 2. bir tablo oluşturularak buradaki verilerle join işi çözecek gibi.(01.01.2004 den 31.12.2004'e kadar bütün tarihleri içeren bir table)[/quote]
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

@SadettinPolat Bey yanıtı vermiş. :lol:

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Benim amacım tek tarihleri içeren bir table ile join etmek. Yada alternatif olarak raporu alınacak kişi ve tarih aralığına bir takvim oluşturup daha sonra yorumlamak... :D

Kolay gelsin
Cevapla