Merhabalar,
Bazen tarih değerlerine bağlı kriterleri sorgulamak isteyebilirsiniz ama sorgulamak istediğiniz tablonun tarih değerleri sıralı bir şekilde gitmiyorsa aldığınız raporda da olmayan tarih bilgilerini görüntüleyemezsiniz.
Bahsedilen bilgiyi örneklendirecek olursak eğer ;
Bir işverensiniz ve çalışanlarınız her gün ürünleriniz hakkında not girişleri yapıyor. Çalışanlarınızın hangi tarihlerde not girişi yapmadıklarını görmek istediğinizde nasıl bir yöntem izlemeniz gerekmektedir. Bahsedilen örnek için yazı olarak anlatmayı bırakıp biraz daha kod üzerinden anlatmaya devam edeyim.
-- Çalışanlarınızı not girişlerinin yapıldığı tablomuz olan TabloA'nın çok basit olan yapısını görelim :) CREATE TABLE TabloA ( ID INT IDENTITY(1,1) ,Tarih DATETIME , notlar VARCHAR(10)) -- Tablomuzu oluşturduğumuza göre bu tablo içerisine örnek kayıt girişlerini gerçekleştirelim. INSERT INTO TabloA VALUES('2014-01-17 00:00:00','Test1') INSERT INTO TabloA VALUES('2014-01-19 00:00:00','Test2') INSERT INTO TabloA VALUES('2014-03-19 00:00:00','Test3') INSERT INTO TabloA VALUES('2014-04-21 00:00:00','Test4') -- Tablomuz içeriği ile beraber hazır olduğuna göre artık Sıralı tarih bilgisi ile dolu olan tarih tablomuzu oluşturalım. ( Generate a list of dates ) IF EXISTS(SELECT * FROM ##GenerateDate) DROP TABLE ##GenerateDate CREATE TABLE ##GenerateDate (DateValue DATETIME) go with mycte as ( select cast('2014-01-01' as datetime) DateValue union all select DateValue + 1 from mycte where DateValue + 1 < '2014-01-20' ) INSERT INTO ##GenerateDate select DateValue from mycte OPTION (MAXRECURSION 0) go -- Sıralı tarih bilgisi ile dolu olan tablomuzda hazır artık yapılması gereken istenilen rapor şeklinde not girişi yapılmamış zamanların raporlarını almaya.. select ##GenerateDate.DateValue FROM ##GenerateDate LEFT JOIN TabloA ON ##GenerateDate.DateValue = TabloA.Tarih WHERE dbo.TabloA.notlar IS NULL
Bu makaleyi de burada bitirerek bir sonraki makalede görüşmek üzere..