다음을 통해 공유


sum 함수(XQuery)

일련의 숫자의 합계를 반환합니다.

구문

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

인수

  • $arg
    합계가 계산되는 일련의 원자 값입니다.

주의

**sum()**에 전달된 모든 유형의 세분화된 값은 동일 기준 유형의 하위 유형이어야 합니다. 허용된 기준 유형은 3가지 기본 제공 숫자 기준 유형이거나 xdt:untypedAtomic입니다. xdt:untypedAtomic 유형의 값이 xs:double로 캐스팅됩니다. 이러한 유형이 혼합되어 있거나 다른 유형의 다른 값이 전달되면 정적 오류가 발생합니다.

sum() 결과는 선택적으로 입력이 빈 시퀀스인 경우에도 xdt:untypedAtomic 경우의 xs:double과 같은 유형으로 전달된 기준 유형을 수신합니다. 입력이 정적으로 빈 경우 결과는 정적 및 동적 xs:integer 유형의 0입니다.

sum() 함수는 숫자 값의 합계를 반환합니다. xdt:untypedAtomic 값을 xs:double로 캐스팅할 수 없는 경우 이 값은 입력 시퀀스 $arg에서 무시됩니다. 입력이 동적으로 계산된 빈 시퀀스인 경우 사용된 기준 유형의 값 0이 반환됩니다.

이 함수는 오버플로 또는 범위 초과 예외가 발생하는 경우 런타임 오류를 반환합니다.

이 항목에서는 AdventureWorks 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 제공합니다. 이러한 각 열에 대한 개요는 AdventureWorks 데이터베이스의 xml 데이터 형식 표시를 참조하십시오.

1. sum() XQuery 함수를 사용하여 제조 프로세스에 있는 모든 작업 센터 위치에서 총 근로 시간을 검색합니다.

다음 쿼리에서는 제조 지침이 저장된 모든 제품 모델에 대해 제조 프로세스에 포함된 모든 작업 센터 위치에 대한 총 근로 시간을 검색합니다.

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       

다음은 결과의 일부입니다.

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

결과를 XML로 반환하는 대신 다음 쿼리에서와 같이 관계형 결과를 생성하는 쿼리를 작성할 수 있습니다.

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        

다음은 결과의 일부입니다.

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

구현 시 제한 사항

제한 사항은 다음과 같습니다.

  • **sum()**의 단일 인수 버전만 지원됩니다.

  • 입력이 동적으로 계산된 빈 시퀀스인 경우 사용된 기준 유형의 값 0이 xs:integer 유형 대신 반환됩니다.

  • sum() 함수는 모든 정수를 xs:decimal로 매핑합니다.

  • xs:duration 유형의 값에 대한 sum() 함수는 지원되지 않습니다.

  • 여러 기본 유형 범위의 유형이 혼합된 시퀀스는 지원되지 않습니다.

  • sum((xs:double(“INF”), xs:double(“-INF”)))는 도메인 오류를 발생시킵니다.