SQL Server – IIF Fonksiyonu İle Veri Kontrolü

Merhaba,

Bir yazılımı bütün olarak ele aldığımızda; genellikle veritabanı tablolarındaki tüm veriler var olduğu gibi son kullanıcıya yansıtılmamakta, gerektiği kadar, hatta verinin orjinal fiziksel kaydını bozmadan kullanıcının anlayabileceği şekilde formatlandırarak yansıtılmaktadır.Tüm bunlara nazaran kullanıcının anlam veremeyeceği istatistiksel veriler yahut sadece programın anlayabileceği formatlandırılmış veriler saklanmakta, gerektiğinde tekrar kullanıcının anlayabileceği şekilde parse edilip arayüze sunulmaktadır.

Tüm bu süreç bazen veritabanı sorgulanırken gerçekleştirilmektedir ki genellikle tercihimiz ve mümkünse önerimizde budur. Tabi her işin bir bedeli olan yazılım dünyasında, tablo sorgularında gelen verileri kontrol edebilmek ve son kullanıcının anlam verebileceği şekilde formatlandırabilmek için yapılan çalışmalar sorguları iyice kompleksleştirmekte ve bu durum özellikle yazılım üzerinden gerçekleştirilen veritabanı sorgulama(mesela Ado.NET kullanırken) durumlarında farkedilmesi zor, zaman alıcı ama aslında çok basit hatalara sebep olabilmektedir.

Bu tarz durumlara, sorgu esnasında elimizdeki veriyi kontrol edebilmek için ‘CASE – WHEN – ELSE – END’ gibi kalıpsal yapıları örnek verebiliriz. Hatta bu yapıyı kodsal olarak aşağıda örneklendirirsek;

SELECT CASE UnvanEki WHEN 'Ms.' THEN 'Bayan'
ELSE CASE UnvanEki WHEN 'Mrs.' THEN
'Bayan' ELSE 'Bay' END END
FROM Personeller

görüldüğü üzere Personeller tablosundan gelen verilerin “Mr.”, “Ms.” ve “Mrs.” bilgilerine karşılık Türkçe anlamlarını yazmaya çalıştığımız zaman sorgu semantik olarak lüzumsuz şişkinlik göstermektedir.

Bu tarz veri kontrolü yapılarak formatlandırılmış sorgularda daha pratik ve kullanışlı çalışma sergileyebilmemiz için SQL Server 2012 sürümüyle birlikte IIF fonksiyonu gelmiş bulunmaktadır.

SELECT IIF(UnvanEki = 'Ms.' OR UnvanEki = 'Mrs.', 'Bayan', 'Bay') FROM Personeller

Gördüğünüz üzere select sorgularında verileri formatlandırmak için IIF fonksiyonu gayet kullanışlılık arz etmekte ve bu işlemi yaparken olası kullanıcı hata ihtimalinide oldukça düşürmektedir.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. EMRE dedi ki:

    Merhabalar,
    Sql tablomda oluşturduğum verilerimi select * from ile listeleme yaptığımda tekrar eden verileri den den (“” “”) işareti ile nasıl listeleyebilirim, heryerde aynı kayıtları bulup silme konuları var ama sorduğum sorunun cevabı yok, bunu if ile veya başka hangi yolla yapabilirim, teşekkürler.

    ÖRNEK
    calisanadi maasi ay
    Ali 3250 OCAK
    ” ” 3550 ŞUBAT
    ” ” 3750 MART
    Ahmet 2575 OCAK
    Veli 2750 OCAK
    ” ” 2850 ŞUBAT

    • Gençay dedi ki:

      Merhaba,

      Sorunuz taktire şayan… Gayet güzel… Çözüm olarak ‘Northwind’ veritabanındaki ‘Satışlar’ tablosunda aşağıdaki örnek sorguyu yazmış bulunmaktayım. Bakıp, inceleyip, mantığını kavrayabilir ve kendi sorgularınıza uyarlayabilirsiniz.

      SELECT
      Tablo.SatisID,
      CASE
      	WHEN (Tablo.sira != 1) THEN '"'
      	ELSE CAST(Tablo.PersonelID as NVARCHAR(MAX))
      END
      FROM
      (
      	SELECT ROW_NUMBER() OVER(PARTITION BY s1.PersonelID ORDER BY s1.OdemeTarihi) sira,
      																			     s1.SatisID,
      																				 s1.PersonelID
      	FROM Satislar s1
      		JOIN Satislar s2
      		ON s1.SatisID = s2.SatisID
      ) Tablo
      

      Kolay gelsin…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*