Aracılığıyla paylaş


Toplam işlev (XQuery)

Bir dizi sayı toplamını verir.

Sözdizimi

fn:sum($arg as xdt:anyAtomicType*) as xdt:anyAtomicType

Bağımsız değişkenler

  • $arg
    Sıra Atomik değerlerin hesaplanması için toplamıdır.

Açıklamalar

Tüm türleri için geçen atomized değerleri sum() aynı temel türün alt türlerinden olmak zorunda.Kabul edilen temel üç yerleşik sayısal temel türler veya xdt:untypedAtomic türleridir.Değerleri türü xdt:untypedAtomic xs:double için artığını.Bu türlerinin bir karışımını ise veya diğer türdeki diğer değerleri aktarılırsa, statik bir hata ortaya çıkar.

Sonucu sum() geçirilen türleri xs:double gibi temel türünü alır durum , xdt:untypedAtomic, giriş isteğe bağlı olarak sıra boş olsa bile.Giriş statik olarak boş ise, sonuç xs:integer statik ve dinamik türü ile 0'dır.

The sum() function returns the sum of the numeric values.Xs:double için xdt:untypedAtomic değer atanamaz değer giriş sırayla sayılır $arg.Giriş bir dinamik olarak hesaplanan boş sırası ise, kullanılan temel türün 0 değeri döndürülür.

işlev Döndüren bir taşma veya aralık özel durum dışında bir çalışma zamanı hatası oluşur.

Örnekler

Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml sütunları yazın AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.

A.Sum() XQuery kullanarak işlev birlikte üretim sürecindeki tüm iş merkezi konumları için işçilik saat sayısı toplamını bulmak için

Aşağıdaki sorgu, kendisi için tüm ürün modellerinin üretim yönergeleri depolanan üretim sürecinde tüm iş merkezi konumları için toplam işçilik saat bulur.

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       

Bu kısmi bir sonucudur.

<ProductModel PMID="7" ProductModelName="HL Touring Frame">
   <TotalLaborHrs>12.75</TotalLaborHrs>
</ProductModel>
<ProductModel PMID="10" ProductModelName="LL Touring Frame">
  <TotalLaborHrs>13</TotalLaborHrs>
</ProductModel>
...

Sonuç xml olarak döndürmek yerine aşağıdaki sorgu gösterildiği gibi ilişkisel sonuçlar üretmek için sorgu yazabilirsiniz:

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        

Bu kısmi bir sonucudur:

ProductModelID Name                 TotalLaborHours       
-------------- -------------------------------------------------
7              HL Touring Frame           12.75                 
10             LL Touring Frame           13                    
43             Touring Rear Wheel         3                     
...

Uygulama kısıtlamaları

Sınırlamalar şunlardır:

  • Yalnızca tek bağımsız değişken sürüm sum() desteklenir.

  • Giriş dinamik olarak hesaplanan bir boş sırası ise, türü xs:integer yerine kullanılan temel türün 0 değeri döndürülür.

  • The sum() function maps all integers to xs:decimal.

  • The sum() function on values of type xs:duration is not supported.

  • Temel tür sınırlarında türleri karıştırmak sıraları desteklenir.

  • Sum((xs:double("INF") xs:double("-INF"))) etki alanı hata yükseltir.