background img
Ara 15, 2017
2203 Views
0 0

Oracle / PLSQL: PIVOT Kullanımı

Yazar :

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

Yorumlar Oracle / PLSQL: PIVOT Kullanımı

  • 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)
    )

    Ramo 6 Aralık 2018 10:13 Yanıtla
  • Teşekkürler çok faydalı bir kullanım örneği olmuş, çok bilgilendirici oldu.

    Şule 16 Şubat 2022 09:29 Yanıtla

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

The maximum upload file size: 50 MB. You can upload: image, audio, video, document, text, other. Links to YouTube, Facebook, Twitter and other services inserted in the comment text will be automatically embedded. Drop file here