Günü Sözü

"Hiçbir şey bilmeyen cahildir, ama bilip de susan ahlaksızdır. " Bertolt Brecht.
"İyilik yapabildiğim zaman mutlu olurum; ama en büyük mutluluk yapılan bir haksızlığı düzeltmektir." Tolstoy

12 Ağustos 2015 Çarşamba

MS SQL PIVOT ve UNPIVOT kullanımı, veritabanı uyumluluk sorunları-çözümleri

PIVOT ve UNPIVOT SQL Server 2005 sürümüne veya daha üzeri bir sürüme yükseltilen veritabanlarında kullanılır. Veritabanının uyumluluk düzeyi 90 veya üzeri bir değere ayarlanmalıdır.
 
Msg 325, Level 15, State 1, Line 5

Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.
 
Yukardaki hatayı alıyorsanız ve
Microsoft SQL 2005 versiyonunda veritabanı uyumluluğu 90 değerinin altında ise;
Database değeri single moda alınır 
  ALTER DATABASE AdventureWorks   
  SET SINGLE_USER 
  GO

Sonra 
  EXEC sp_dbcmptlevel AdventureWorks, 90;
  GO 

En son ise tekrar multi user moda alınır.
 
  ALTER DATABASE AdventureWorks 
  SET MULTI_USER 
  GO
 
SQL Server versiyonu 2005 ve üzeri ise 90 değerine ayarlamak için bu sefer
    ALTER DATABASE AdventureWorks SET COMPATIBILITY_LEVEL=90
yapılır.
 
Örnek Pivot uygulaması (Ambar toplamları):
USE XXXX
go  
select stokkodu, stokadi, [ÇİNKO],[FASGEL],[FOSFAT],[MALKABUL],[MANGAN],[REDMK] from XXXX ) tablom
PIVOT (
sum(kalan)
 FOR AmbarNo IN ([ÇİNKO],[FASGEL],[FOSFAT],[MALKABUL],[MANGAN],[REDMK])
) PivotToplam
WHERE StokKodu='732740'
ORDER BY stokkodu
 
 
 
 Unpivot  örneği ise ambarlar satırda gösterilebilir.
farklı bir örnek verelim bunun için;
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO










 

Hiç yorum yok:

Yorum Gönder