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.
Berlaku untuk:SQL Server
Mengembalikan jumlah urutan angka.
Sintaks
fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType
Argumen
$arg
Urutan nilai atomik yang jumlahnya akan dihitung.
Keterangan
Semua jenis nilai yang diatomisasi yang diteruskan ke sum() harus berupa subjenis dari jenis dasar yang sama. Jenis dasar yang diterima adalah tiga jenis dasar numerik bawaan atau xdt:untypedAtomic. Nilai jenis xdt:untypedAtomic ditransmisikan ke xs:double. Jika ada campuran jenis ini, atau jika nilai lain dari jenis lain diteruskan, kesalahan statis akan muncul.
Hasil sum () menerima jenis dasar dari jenis yang diteruskan seperti xs:double dalam kasus xdt:untypedAtomic, bahkan jika input secara opsional adalah urutan kosong. Jika input kosong secara statis, hasilnya adalah 0 dengan jenis statis dan dinamis xs:integer.
Fungsi sum() mengembalikan jumlah nilai numerik. Jika nilai xdt:untypedAtomic tidak dapat ditransmisikan ke xs:double, nilai diabaikan dalam urutan input, $arg. Jika input adalah urutan kosong yang dihitung secara dinamis, nilai 0 dari jenis dasar yang digunakan dikembalikan.
Fungsi mengembalikan kesalahan runtime saat terjadi pengecualian luapan atau di luar rentang.
Contoh
Topik ini menyediakan contoh XQuery terhadap instans XML yang disimpan di berbagai kolom jenis xml dalam AdventureWorks2025 database.
J. Menggunakan fungsi sum() XQuery untuk menemukan jumlah total gabungan jam kerja untuk semua lokasi pusat kerja dalam proses manufaktur
Kueri berikut menemukan total jam kerja untuk semua lokasi pusat kerja dalam proses manufaktur semua model produk tempat instruksi manufaktur disimpan.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<ProductModel PMID= "{ sql:column("Production.ProductModel.ProductModelID") }"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
<TotalLaborHrs>
{ sum(//AWMI:Location/@LaborHours) }
</TotalLaborHrs>
</ProductModel>
') as Result
FROM Production.ProductModel
WHERE Instructions is not NULL
Ini adalah hasil parsial.
<ProductModel PMID="7" ProductModelName="HL Touring Frame">
<TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
<TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...
Alih-alih mengembalikan hasil sebagai XML, Anda bisa menulis kueri untuk menghasilkan hasil relasional, seperti yang diperlihatkan dalam kueri berikut:
SELECT ProductModelID,
Name,
Instructions.value('declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
sum(//AWMI:Location/@LaborHours)', 'float') as TotalLaborHours
FROM Production.ProductModel
WHERE Instructions is not NULL
Ini adalah hasil parsial:
ProductModelID Name TotalLaborHours
-------------- -------------------------------------------------
7 HL Touring Frame 12.75
10 LL Touring Frame 13
43 Touring Rear Wheel 3
...
Batasan Implementasi
Ini adalah batasannya:
Hanya versi argumen tunggal dari sum() yang didukung.
Jika input adalah urutan kosong yang dihitung secara dinamis, nilai 0 dari jenis dasar yang digunakan dikembalikan alih-alih jenis xs:integer.
Fungsi sum() memetakan semua bilangan bulat ke xs:desimal.
Fungsi sum() pada nilai jenis xs:duration tidak didukung.
Urutan yang mencampur jenis di seluruh batas jenis dasar tidak didukung.
Sum((xs:double("INF"), xs:double("-INF"))) menimbulkan kesalahan domain.