Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengembalikan kumpulan nilai argumen yang diproyeksikan dari partisi grup saat ini yang terkait dengan agregat. Agregat GroupPartition adalah agregat berbasis grup dan tidak memiliki formulir berbasis koleksi.
Sintaksis
GROUPPARTITION( [ALL|DISTINCT] expression )
Argumen
expression Ekspresi SQL Entitas apa pun.
Komentar
Kueri berikut menghasilkan daftar produk dan kumpulan jumlah baris pesanan per setiap produk:
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
Dua kueri berikut secara semantik sama:
SELECT p, Sum(GroupPartition(ol.Quantity)) FROM LOB.OrderLines AS ol
GROUP BY ol.Product AS p
SELECT p, Sum(ol.Quantity) FROM LOB.OrderLines AS ol
group by ol.Product as p
Operator GROUPPARTITION dapat digunakan bersama dengan fungsi agregat yang ditentukan pengguna.
GROUPPARTITION adalah operator agregat khusus yang menyimpan referensi ke set input yang dikelompokkan. Referensi ini dapat digunakan di mana saja dalam kueri di mana GROUP BY berada dalam cakupan. Contohnya:
SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
Dengan reguler GROUP BY, hasil pengelompokan disembunyikan. Anda hanya dapat menggunakan hasil dalam fungsi agregat. Untuk melihat hasil pengelompokan, Anda harus menghubungkan hasil pengelompokan dan input yang ditetapkan dengan menggunakan subkueri. Dua pernyataan berikut setara:
SELECT p, (SELECT q FROM GroupPartition(ol.Quantity) AS q) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
SELECT p, (SELECT ol.Quantity AS q FROM LOB.OrderLines AS ol2 WHERE ol2.Product = p) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
Seperti yang terlihat dari contoh, operator agregat GROUPPARTITION memudahkan untuk mendapatkan referensi ke set input setelah pengelompokan.
Operator GROUPPARTITION dapat menentukan ekspresi SQL Entitas apa pun dalam input operator saat Anda menggunakan expression parameter .
Misalnya semua ekspresi input berikut ke partisi grup valid:
SELECT groupkey, GroupPartition(b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(1) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(a + b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({a + b}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({42}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(b > a) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
Contoh
Contoh berikut menunjukkan cara menggunakan klausa GROUPPARTITION dengan klausa GROUP BY. Klausa GROUP BY mengelompokkan SalesOrderHeader entitas berdasarkan Contact. Klausa GROUPPARTITION kemudian memproyeksikan TotalDue properti untuk setiap grup, menghasilkan kumpulan desimal.
USING Microsoft.Samples.Entity
Function MyAvg(dues Collection(Decimal)) AS
(
Avg(SELECT value due FROM dues AS due WHERE due > @price)
)
SELECT TOP(10) contactID, MyAvg(GroupPartition(order.TotalDue))
FROM AdventureWorksEntities.SalesOrderHeaders AS order
GROUP BY order.Contact.ContactID AS contactID;