Share via


Toplamişlev (XQuery)

Bir dizi sayı toplamını verir.

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

Bağımsız değişkenler

  • $arg
    Sıra atomik değerler, hesaplanması için toplamıdır.

Remarks

Geçirilen atomized değerlerin türleri SUM() alt türlerinden temel aynı türde olması gerekir.Kabul edilen temel yerleşik sayısal temel üç ya da xdt:untypedAtomic türleridir.Tür xdt:untypedAtomic değerlerini xs:double için artığını.Bu türlerinin bir karışımını varsa veya diğer türdeki diğer değerleri geçirilirse, statik bir hata ortaya çıkar.

Sonucu SUM() , giriş isteğe bağlı olarak, sıra boş olsa bile xs:double xdt:untypedAtomic, örneğinde olduğu gibi geçirilen türü temel tür alır.Giriş, statik olarak boş ise, xs:integer statik ve dinamik türü ile 0 sonucudur.

The sum() işlev returns the sum of the numeric values.Bir xdt:untypedAtomic değeri için xs:double atanamaz, değer giriş sırasını göz ardı edilir $arg. Giriş dinamik olarak hesaplanan, boş bir dizi ise, kullanılan temel tür 0 değerini verir.

işlev Taşma veya aralık özel durum dışında çalışma zamanı hatası oluşuyor döndürür.

Örnekler

Bu konu, çeşitli içinde depolanan XML örnekleri karşı XQuery örnekler sağlar. XML türü sütunAdventureWorks Veritabanı. Konusuna genel bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks veritabanındaki.

C.Üretim sürecinde işçilik saattir ve iş merkezi için tüm konumları birleşik toplam sayısını bulmak için sum() XQuery işlevini kullanma

Iş merkezi için tüm konumlar için toplam işçilik saati, aşağıdaki sorgu üretim yönergeleri için tüm ürün modellerinde, depolanan üretim sürecinde 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 kaynaklanır.

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

Sonuç olarak, XML döndürmek yerine, sorgu ilişkisel sonuçlar üretmek için aşağıdaki sorguda gösterildiği gibi 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 bir bağımsız değişken sürüm SUM() desteklenir.

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

  • The sum() işlev maps all integers to xs:decimal.

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

  • Temel tür sınırlarında türlerini karma sıralar desteklenmez.

  • The sum((xs:double(“INF”) xs:double(“-INF”))) bir etki alanı hata yükseltir.