Pivot isteği üç mantıksal işlem aşamalarını, ilgili elemanların her biri şunları içerir: fazgruplandırma
- Yayılma fazı
- ve ilişkili bir toplama öğesi ve toplama işlevi bulunan bir birleştirme aşaması.
Yani sizin durumda şartı ile bu aşamaları haritalama:
- Gruplama
‘Location’
- yayma üzerinde yapılması gereken gibi nihai sütun adları ile
‘Product’
sütun değerlerine dayalı yapılmalıdır: 'Pepsi ', 'Kek', 'Elma'. SELECT ...
FROM <source_table_or_table_expression>
PIVOT(<agg_func>(<aggregation_element>)
FOR <spreading_element>
IN (<list_of_target_columns>)) AS <result_table_alias>
Sorgunuzda olur:
select location ,[PEPSI], [CAKE],[APPLE]
from table1
pivot (sum(qty)
for product
in ([PEPSI], [CAKE],[APPLE])) AS T
‘Qty’
değerleri gruplama için değerleri kesişen ve yayma elemanları
standart Pivot açıklamada bu değerleri koymak üretmek için toplanır edilmelidir PIVOT operatörü ile gruplama elemanlarını açıkça belirtmediğinizi, n sorguda GROUP BY için eed. PIVOT operatörü, gruplarını, yayma öğesi veya toplama öğesi olarak belirtilmemiş olan kaynak tablodan (veya tablo ifadesinden) tüm nitelikler olarak örtük olarak belirtir. Bu nedenle, PIVOT operatörü için kaynak tablonun, gruplama, yayma ve toplama öğeleri dışında hiçbir özniteliğe sahip olmamasını sağlamalısınız, böylece yayma ve toplama öğelerini belirledikten sonra, geriye kalan tek özellik, gruplandırma öğeleri olarak amaçladığınızlardır. Bunu, PIVOT operatörünü doğrudan orijinal tabloya uygulayarak değil, sadece dönme elemanlarını temsil eden öznitelikleri ve başkalarını içermeyen bir tablo ifadesine uygulayarak elde edersiniz.
select location ,[PEPSI], [CAKE],[APPLE]
from (select location,product,qty
from table1) as SourceTable
pivot (sum(qty)
for product
in ([PEPSI], [CAKE],[APPLE])) AS T
Umut bu iyi anlaşılması Pivot operatörü olur !!
DÜZENLEME: Katma UNPIVOT operatör konsepti:
gibi Oynar, Unpivoting da 3 mantıksal aşamaları içerir: ortadan kaldırmak
- üreten kopya
- ayıklanıyor elemanları
- alakasız kesişen kayıtları
Standart Unpivot ifadesinde bu değerleri koymak :
SELECT ...
FROM <source_table_or_table_expression>
UNPIVOT(<target_col_to_hold_source_col_values>
FOR <target_col_to_hold_source_col_names> IN(<list_of_source_columns>)) AS
<result_table_alias>;
sizin durumunuzda şartı ile bu aşamaları eşleme: Sütun ... İstediğiniz [Pepsi], [Cake],[Apple]
100.250 yani değerleri tutmak için:
<target_col_to_hold_source_col_values>
= kaynak sütun yapacak sütunun adı yani değerleri tek bir sütunun olması: Qty
<target_col_to_hold_source_col_names>
= Kaynak sütun adlarını tutacak sütunun adı yani: sütun adlarını tutmak için [Pepsi], [Cake],[Apple]
sütun adlarını tek bir sütuna sahip olmak istediğinizde s: Eğer ilgilenen kaynak tablodaki sütunların product
<list_of_source_columns>
= isimleri yani: [Pepsi], [Cake],[Apple]
Sorgunuzda olur: Bir Pivot açıklamada yukarıdan sonuçları eklemiş
SELECT location,product,qty
FROM #temp
UNPIVOT(qty
FOR product
IN([Pepsi],[Cake],[Apple])) AS U;
geçici tablo #temp
.
Dikkat edilmesi gereken önemli nokta şudur: Özetlenmiş bir tablonun devre dışı bırakılması, orijinal tabloyu bir araya getirme nedeniyle ayrıntılı bilgi kaybında döndürme sonucu olarak geri getiremez.
+1 dinamik sql örneği için – Dan