Bagikan melalui


Fungsi Agregat - jumlah

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.

Lihat Juga

Fungsi XQuery terhadap Tipe Data xml