복붙노트

[SQL] SQL 서버 : SUM () 여기서 조항을 포함하여 여러 행의

SQL

SQL 서버 : SUM () 여기서 조항을 포함하여 여러 행의

나는 다음과 같은 일을 보이는 테이블이 :

  PropertyID     Amount     Type       EndDate
 --------------------------------------------
   1              100       RENT        null              
   1              50        WATER       null         
   1              60        ELEC        null        
   1              10        OTHER       null      
   2              70        RENT        null
   2              10        WATER       null

여러 항목도, 속성에 청구를 여러 번 청구가있을 것입니다. 예를 들어 임대료 (otherwords에서, 현재의) 속성에 나는에 대한 관심 (년 이상) # 1의 12 배, 그러나 유일한 사람 널의 ENDDATE 가진 사람을 청구 할 수

내가 달성하고 싶습니다 :

    PropertyId       Amount
  --------------------------       
      1                220
      2                80

나는 이런 식으로 뭔가를 시도했다 :

SELECT
   propertyId,
   SUM() as TOTAL_COSTS
FROM
   MyTable

그러나, SUM에 나는 요금의 각 유형에 다시 현재의 양을 가져 오는 여러 선택을 강요 할 것인가? 나는이되고 지저분한을 볼 수 있었다 나는 훨씬 더 간단한 해결책을 바라고 있어요

어떤 아이디어?

해결법

  1. ==============================

    1.이 속성 및 유형 당 합계를 다시 가져올 것이다

    이 속성 및 유형 당 합계를 다시 가져올 것이다

    SELECT  PropertyID,
            TYPE,
            SUM(Amount)
    FROM    yourTable
    GROUP BY    PropertyID,
                TYPE
    

    이 활성 값을 다시 가져올 것이다

    SELECT  PropertyID,
            TYPE,
            SUM(Amount)
    FROM    yourTable
    WHERE   EndDate IS NULL
    GROUP BY    PropertyID,
                TYPE
    

    이 속성에 대한 합계를 다시 가져올 것이다

    SELECT  PropertyID,
            SUM(Amount)
    FROM    yourTable
    WHERE   EndDate IS NULL
    GROUP BY    PropertyID
    

    ......

  2. ==============================

    2.이 시도:

    이 시도:

    SELECT
       PropertyId,
       SUM(Amount) as TOTAL_COSTS
    FROM
       MyTable
    WHERE
       EndDate IS NULL
    GROUP BY
       PropertyId
    
  3. ==============================

    3.당신은 종료 날짜가 null의 각 속성에 대한 (모든 유형의 금액) 합계를 getiing 의미 :

    당신은 종료 날짜가 null의 각 속성에 대한 (모든 유형의 금액) 합계를 getiing 의미 :

    SELECT propertyId, SUM(Amount) as TOTAL_COSTS
      FROM MyTable
     WHERE EndDate IS NULL
    GROUP BY propertyId
    
  4. ==============================

    4.소리는 당신이 뭔가를 원하는 좋아 :

    소리는 당신이 뭔가를 원하는 좋아 :

    select PropertyID, SUM(Amount)
    from MyTable
    Where EndDate is null
    Group by PropertyID
    
  5. ==============================

    5.WHERE 절은 항상 개념적으로 GROUP BY 이전에 (실행 계획이 분명히, 원하는 것을 할 수있는)에 적용된다. 그것은 쿼리에서 GROUP BY 앞에 오는 방법과 여기에 대한 답변의 대부분의 작품 일이 합산하기 전에 필터의 역할을해야합니다.

    WHERE 절은 항상 개념적으로 GROUP BY 이전에 (실행 계획이 분명히, 원하는 것을 할 수있는)에 적용된다. 그것은 쿼리에서 GROUP BY 앞에 오는 방법과 여기에 대한 답변의 대부분의 작품 일이 합산하기 전에 필터의 역할을해야합니다.

    또한 그룹 BY 후에 와야 옵션 HAVING 절 알고 있어야합니다. 이는 그룹화 한 후 그룹의 특성 결과를 필터링하는데 사용될 수 - SUM (양)을 갖는 예> 0

  6. ==============================

    6.총계 행을 추가하려면 공통 테이블 식을 사용하여, 100 일에 의해 주문이 필요합니다.

    총계 행을 추가하려면 공통 테이블 식을 사용하여, 100 일에 의해 주문이 필요합니다.

    With Detail as 
    (
        SELECT  top 100 propertyId, SUM(Amount) as TOTAL_COSTS
        FROM MyTable
        WHERE EndDate IS NULL
        GROUP BY propertyId
        ORDER BY TOTAL_COSTS desc
    )
    
    Select * from Detail
    Union all
    Select ' Total ', sum(TOTAL_COSTS) from Detail
    
  7. from https://stackoverflow.com/questions/1607720/sql-server-sum-of-multiple-rows-including-where-clauses by cc-by-sa and MIT license