Kategori arşivi: Query Analyzer

SQL Server T-Sql seçme query örnekleri

SQL Satır Payı, Satır Yüzdesi

Raporlama amaçlı kullandığımız sistemler üzerinde en çok Ara Toplam (Sub Total) ve Alt Toplam (Grand Total) satırlarına ihtiyaç duyarız. Bunlarla birlikte özellikle karşılaştırmanın sözkonusu olduğu için verilerde özetlenmiş satırın tüm toplam içerisindeki payına yanı o satırın yüzdesine de (Percent To Total) ihtiyaç duyabiliriz. Bunun için SQL’de subquery yöntemi kullanılır veya SQL Server 2005 ile birlikte gelmiş olan OVER() fonksiyonu tercih edilir.
Okumaya devam et

SQL Örneklem ve Rastgele Kayıt Seçimi

T-SQL’de bir tablodan rastgele kayıt seçmenin farklı yöntemleri bulunmaktadır. Bunlardan en popüler olanı NEWID() isimli sistem fonksiyonun kullanılmasıdır. Bu fonksiyon her çağrıldığında uniqueidentifier türünde tekil bir değer döndürür. Okuduğumuz tabloda her satır için bunu çağırıp listeyip bu alana göre sıralamamız yeterli olacaktır.
Okumaya devam et

EXEC ve sp_executesql Hangisi ?

Doğrudan SQL komutu çalıştırmak yerine bazı durumlarda dinamik SQL scriptleri çalıştırmak zorunda kalabiliyoruz. Özellikle stored procedure’ler içerisinde değişkenler kullanılarak oluşturulmuş script’leri çalıştırmak için EXEC komutu veya sp_executesql prosedürü kullanılır. Peki bunlardan hangisini ne zaman tercih etmeliyiz. Normal şartlar altında bir SQL cümlesini doğrudan çalıştırdığımız SQL Server, bellekten ilgili yürütme planını okuyup ona göre sorguyu çalıştırır. Böylece daha önceki deneyimleri doğrultusunda en uygun okumayı tercih etmiş olur. Fakat dinamik cümleleri çalıştırırken execution plan kullanılmaz her çalıştırmada yeni bir execution plan oluşturulur. Bu iki komutun en önemli farkı sp_executesql, parametrik olabilirken EXEC / EXECUTE parametrik değildir. Buradaki parametreden kastımız bu komutlara parametre olarak verilmiş sorgunun parametrik olmasıdır. Asıl önemli olan konu performans açısından sunucu aynı execution plan’ı kullandığı için daha sp_executesql yordamı daha iyi sonuç vermektedir. Çünkü bu yordamın mantığı sorgunun aynı olduğu sadece parametrenin farklı çalıştırılıyor olmasıdır. Aşağıdaki örnekte küçük bir tablodan bu 2 yordam aracılığıyla okuma yapılmış olup execution plan durumları listelenmiştir. Sistemdeki mevcut execution plan’ları temizlemek için DBCC FREEPROCCACHE kullanılır.
Okumaya devam et

SQL Server Para Formatı

T-SQL kütüphanesinde içerisinde sayısal bir veriyi yerel para formatında gösterecek bir fonksiyon bulunmamaktadır. Ancak parasal değer MONEY formatında saklanmışsa bu değeri Management Studio üzerinde SELECT ettiğimizde ondalık ayraç (decimal symbol) bilgisini sunucudaki “Region and Language” alanından okuyarak düzenleyebilir.

DECLARE @X MONEY
DECLARE @Y NUMERIC(9,2)
SET @X=125075.25
SET @Y=125075.25
SELECT @X
SELECT @Y

Bu sorgunun sonucu sırasıyla aşağıdaki gibi görünecektir.
125075,25
125075.25

Görüldüğü gibi MONEY türündeki veri için ondalık ayraç olarak virgülü kullandı. Ayrıca veri türü MONEY olduğu zaman virgül ve nokta ayraçları sorun çıkarmadan çevrilebilir. Aşağıdaki iki ifade de “125075,25¨ değeri döner.

SELECT CAST('125075.25' as MONEY)
SELECT CAST('125,075.25' as MONEY)

Değeri gösterirken binlik ayraç (digit grouping) bilgisini de göstermek için CONVERT() fonksiyonu kullanılır. CONVERT fonksiyonuna 3. parametre 1 değeri verildiği zaman binlik ayraçı da göstermiş olacaktır.

SELECT CONVERT(VARCHAR(10), @X, 1)

125,075.25
CONVERT fonksiyonu sadece MONEY türündeki veriler için bu şekilde formatlama yapabilir. Değerin türü MONEY değilse önce MONEY türüne çevirmek gerekecek.

SELECT CONVERT(VARCHAR(10), CAST(125075.25 as MONEY), 1)

T-SQL WITH TIES Seçeneği

Lokasyon ve tutar alanlarının bulunduğu bir tablo düşünelim.

SQL Server’de bu tablodaki satırların TOP N kayıtlarını almak istediğimizde aşağıdaki gibi bir sorgu yazarız.

SELECT TOP 2 location_id, amount FROM Deneme
ORDER BY amount DESC


En yüksek cirolu ilk 2 mağazayı almış olduk. Fakat bazı durumlarda en yüksek cirolu tüm satırları almak isteyebiliriz. En yüksek ciro bu örnekte 420 değeridir. Bu değerden 4 satır bulunmaktadır. Bu satırlarının hepsini almak için SQL Server’de WITH TIES yantümcesi kullanılır. Bu ifade ORDER BY ile sıralanmış sonuç listesi sıralama mantığına uyan aynı değerdeki tüm kayıtları listeler. WITH TIES yan tümcesi ancak ORDER BY ile birlikte kullanılabilir. Sorguyu aşağıdaki gibi güncellediğimiz TOP 2 olarak belirlediğimiz halde tüm 420 değerindeki satırlar listelenmiş olacaktır.

SELECT TOP 2 WITH TIES location_id, amount FROM Deneme
ORDER BY amount DESC

SQL Server Önceki Satırların Toplamı

Özellikle bazı raporlarda veri satırlarının yanına kendinden önceki satılardaki bir alanın toplamını yazma ihtiyacı duyabiliyoruz. Aşağıdaki gibi Satis isimli bir tablo olduğunu düşünelim.

Bu tabloda her dönemin karşısında o döneme ait ciro bulunmaktadır. Bu tablodaki verilere dayalı olarak aşağıdaki gibi bir sonuç elde etmek istiyoruz.

Okumaya devam et

SQL’de HTML Formatında Sorgu

BCP programı, Import / Export Wizard, SQL Server 2000’deki Data Transformation Services (DTS) ve SQL Server 2005’teki SQL Server Integration Services araçlarını kullanarak SQL Server içerisinde html formatında data çekilebilir. Aslında SQL Server’de bu tür formatta verilerin çekilmesinin Reporting Services aracılığıyla yapılması daha mantıklıdır. Fakat bu yazıda Reporting Services’i kurmadan bir sorgunun sonucunu html biçiminde nasıl dışarı veririz onu örneklendireceğiz. Okumaya devam et

Bir Kullanıcının Yetkilerini Başka Kullanıcıya Kopyalamak

SQL Server’de bir kullanıcıya verdiğimiz yetkileri başka bir kullanıcıya nasıl kopyalayabiliriz. T-SQL’de bunu doğrudan yapabileceğimiz bir komut yapısı bulunmamaktadır. Her defasında her kullanıcı için GRANT ve DENY ifadelerini kullanarak manual olarak aynı yetkilerin verilmesi gerekir. Veya Management Studio veya Enterprise Manager üzerindeki Generate Script bölümü kullanılarak veritabanına ait script kodları oluşturulur. Orada ilgili kopyalama ve değiştirme işlemi yapılır. Bu yazıda nasıl bir script yazılarak bu işlemin daha kolay yapılacağını örneklendireceğiz. Okumaya devam et