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.