Bugün Bana da lazım olan ve herkesin işine yarayacak Oracle de Pivot kullamını anlatmaya çalışacağım.
Açıklama
Oracle PIVOT yan tümcesi, Oracle 11g’den başlayarak çapraz tablo oluşturma sorgusu oluşturmanıza izin verir. Bu, sonuçlarınızı toplayıp satırları sütunlara döndürebileceğiniz anlamına gelir.
Kullanımı
The syntax for the PIVOT clause in Oracle/PLSQL is:
SELECT * FROM ( SELECT alan1, alan2 FROM tables WHERE tablom ) PIVOT ( kullanilacak_fonksiyon(alan2) FOR column2 IN ( expr1, expr2, ... expr_n) | altsorgu ) ORDER BY alan1 [ ASC | DESC ];
Parametreler veya Argümanlar
- kullanilacak_fonksiyon
- SUM,COUNT,MIN,MAX yada AVG fonksiyonlarını kullanabiliyoruz.
- IN ( deger1, deger2, … deger_n )
Çapraz tablolama sorgu sonuçlarındaki başlıklara dönmek için alan2 için bir değer listesi.
alt sorgu
Bir değer listesi yerine kullanılabilir. Bu durumda, alt sorgunun sonuçları, çapraz tablo oluşturma sorgu sonuçlarındaki başlıklara dönmek için alan2 değerlerini belirlemek için kullanılır.
Kullanılabilir Sürümler
PIVOT fonksiyonu sadece aşağıdaki sürümlerde geçerlidir. Önceki sürümlerde mevcut değildir. SQL server çoktan beri olmasına karşı ORACLE ye yeni ekleyebilmişler.
- Oracle 12c, Oracle 11g
Örnek
Oracle’da PIVOT yan tümcesinin nasıl kullanılacağını inceleyelim.
Örneğimizi aşağıdaki tanımlamayla siparişler denilen bir tabloya dayandırırız:
CREATE TABLE siparisler ( order_id integer NOT NULL, customer_ref varchar2(50) NOT NULL, order_date date, product_id integer, quantity integer, CONSTRAINT orders_pk PRIMARY KEY (order_id) );
Bu örneğe ait verileri göstermek için, aşağıdaki SELECT deyimiyle sipariş tablosundaki kayıtları seçeceğiz:
SELECT order_id, customer_ref, product_id FROM siparisler ORDER BY order_id;
Bunlar siparisler tablolarındaki kayıtlardır. Bu kayıtları, PIVOT maddesinin nasıl çalıştığını göstermek için kullanacağız:
order_id | customer_ref | product_id |
---|---|---|
50001 | İSMAİL | 10 |
50002 | İSMAİL | 20 |
50003 | AHMET | 30 |
50004 | AHMET | 40 |
50005 | ERKAN | 10 |
50006 | ERKAN | 20 |
50007 | İSMAİL | 20 |
50008 | İSMAİL | 10 |
50009 | İSMAİL | 20 |
Şimdi, aşağıdaki PIVOT yan tümcesini kullanarak tablolar arası sorguyu oluşturalım:
SELECT * FROM ( SELECT customer_ref, product_id FROM siparisler ) PIVOT ( COUNT(product_id) FOR product_id IN (10, 20, 30) ) ORDER BY customer_ref;
Bu örnekte, PIVOT yan tümcesi aşağıdaki sonuçları döndürür:
customer_ref | 10 | 20 | 30 |
---|---|---|---|
AHMET | 0 | 0 | 1 |
ERKAN | 1 | 1 | 0 |
İSMAİL | 2 | 3 | 0 |
Burda dikkat etmemiz gereken önemli bir noktada PIVOT ta kullanacağımız değerlerin sayısal(integer) yada alfasayısal (stging) olmasıdır. String ifadeleri tek tırnak (‘) içine almamız gerekiyor.
Şimdi, PIVOT maddesini parçalayıp nasıl çalıştığını açıklayalım.
Dahil Edilecek Alanları Belirtin
Önce, çapraz tablolamaya hangi alanların ekleneceğini belirtmek istiyoruz. Bu örnekte, customer_ref ve product_id alanlarını eklemek istiyoruz. Bu, ifadenin aşağıdaki bölümüyle yapılır:
( SELECT customer_ref, product_id FROM siparisler )
Sütunları herhangi bir sıraya göre listeleyebilirsiniz.
Toplam İşlevi Belirtin
Ardından, tablolar arası sorguyu oluştururken hangi toplama işlevi kullanılacağını belirtmeliyiz. SUM, COUNT, MIN, MAX veya AVG işlevleri gibi herhangi bir topluluğu kullanabilirsiniz.
Bu örnekte, COUNT işlevini kullanacağız. Bu, ölçütlerimizi karşılayan product_id değerlerinin sayısını sayacaktır. Bu, ifadenin aşağıdaki bölümüyle yapılır:
PIVOT ( COUNT(product_id)
Pivot Değerlerini Belirtin
Son olarak, sonuçlarımıza hangi pivot değerlerini ekleyeceğinizi belirtmeliyiz. Çapraz tablolama sorgumuzda bunlar sütun başlıkları olarak kullanılacaktır. Pivot değerlerini belirtmek için parantez içine alınmış değerlerin bir listesini veya bir alt sorguyu kullanabilirsiniz.
Bu örnekte, yalnızca aşağıdaki product_id değerlerini döndürmek istiyoruz: 10, 20, 30. Bu değerler, tablolar arası sorgudaki sütun başlıklarımıza dönüşecektir. Ayrıca, bu değerlerin product_id değerlerinin sınırlı bir listesi olduğunu ve olası tüm değerleri içerebileceğini unutmayın.
Bu, ifadenin aşağıdaki bölümüyle yapılır:
FOR product_id IN (10, 20, 30) )
Şimdi hepsini bir araya getirdiğimizde aşağıdaki pivot tabloyu elde ettik:
customer_ref | 10 | 20 | 30 |
---|---|---|---|
AHMET | 0 | 0 | 1 |
ERKAN | 1 | 1 | 0 |
İSMAİL | 2 | 3 | 0 |
Merhaba ,
Aşağıdaki alana (10,20,30) yani sütun başlıklarını manuel değilde sorguyla atayabilmem için ne yapmam gerekir.Select cümlesi ile yazdığımda kabul etmemektedir.
Yardımınız için tşk.
1
2
FOR product_id IN (10, 20, 30)
)
Teşekkürler çok faydalı bir kullanım örneği olmuş, çok bilgilendirici oldu.