Bir kolonu iki kolon olarak özetlemek

SQL Server’da bir kolonda bulunan dataları belli koşula göre iki kolon şeklinde ifade etmeye çalışalım. Bunun için güzel bir örnek olarak tüm alış, satış, müşteri iaderlerin tutulduğu bir tabloyu düşünelim. HAREKET isimli bu tabloda hareketleri birbirinden ayırmak HareketTip isminde bir kolon kullanacağız. Bu kolonda “A”, alış, “S”, satış anlamına gelmektedir. Tabloda yıllara göre hareket özetleri verilmiştir.

CREATE TABLE [dbo].[HAREKET](
	[HareketId] [int] IDENTITY(1,1) NOT NULL,
	[HareketTip] [char](1) COLLATE Turkish_CI_AS NULL,
	[Yil] [int] NULL,
	[Adet] [int] NULL
) ON [PRIMARY]

Örnek olarak aşağıdaki verileri girelim.

HareketId HareketTip Yil Adet
1 A 2001 10
2 A 2001 20
3 S 2001 5
4 S 2002 4
5 A 2002 14

Bizden istenilen buradaki verileri Satış ve Alış olarak iki kolonda göstermektir. Burada önemli olan tabloyu bir kerede okuyup istenilen sonucu oluşturmaktır. Bunun için en güzel yöntem CASE deyimini kullanmaktır. Hareket tipine bakarak verileri iki kolonda göstereceğiz. Şimdi 2001 yılı bu durumu gerçekleştirelim;

SELECT
	(CASE Harekettip WHEN 'A' THEN Adet ELSE 0 END) [Alış],
	(CASE Harekettip WHEN 'S' THEN Adet ELSE 0 END) [Satış]
FROM HAREKET WHERE Yil=2001
Alış Satış
10 0
20 0
0 5

Tek yılı kriter olarak girdiğimiz için bu şekilde satır satır göstermek yerine toplamını göstermek daha mantıklı olacaktır. Bunun için de yapacağımız tek şey, SUM ile değerleri toplamaktır. Hatta yıllara göre özetleyip toplamını sunalım.

SELECT Yil,
	SUM(CASE Harekettip WHEN 'A' THEN Adet ELSE 0 END) [Alış],
	SUM(CASE Harekettip WHEN 'S' THEN Adet ELSE 0 END) [Satış]
FROM HAREKET
GROUP BY Yil
Yil Alış Satış
2001 30 5
2002 14 4

Bir yanıt yazın

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