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 |