2017-11-12 1 views
0

일부 숫자 값은 본질적으로 음수임을 나타내려면 내 SUM 쿼리에서 데이터를 변환하려고합니다.SQL SUM 및 값 변환

나는 예제 데이터 세트도 (inv_type 열에서 신용 가치 C이있는 모든 레코드가 SQL SUM 기능에 부정적으로 취급해야하지만) 데이터베이스에 부정적으로 작성되지 않은 신용 거래를 포함 고객 균형을 찾아 . , 비록이 쿼리는 분명히 고객의 균형 (65) 없음 (25) 및 (32) 없음 (35) 합계 것

select cust_no, sum(value) from INVOICES 
group by cust_no 

:

INVOICES 
    inv_no inv_type cust_no value 

     1  D   25 10 
     2  D   35 30 
     3  C   25 5 
     4  D   25 50 
     5  C   35 2 

내 간단한 SUM 기능이 나에게 정답을주지 못할 것이다 : 예를 들어 예상 답변은 10-5 + 50 = 55 및 30-2 = 28

어쨌든 CAST 기능을 사용해야합니까? 불행히도 나는 기본 엔진에 대해 최신 정보를 얻지 못했지만, IBM 엔진이 될 가능성은 높습니다. 지금까지 대부분의 기본 SQL 코드가 작동했습니다.

+0

'SELECT'문에 'IF'가 중복 될 수 있습니다 - 열 값을 기준으로 출력 값 선택] (https://stackoverflow.com/questions/5951157/if-in-select-statement-choose-output-value -based-on-column-values) – caramba

+1

어떤 [DBMS] (https://en.wikipedia.org/wiki/DBMS) 제품을 사용하고 있습니까? 포스트그레스? 신탁? "_SQL_"은 쿼리 언어 일뿐 특정 데이터베이스 제품의 이름은 아닙니다. –

답변

0

inv_type 등을 기반으로 서명 된 값 열을 얻으려면 먼저 투영 (선택)을 작성한 다음 그 위에 합계를 수행 할 수 있어야합니다. 이처럼

:

select 
    cust_no, 
    sum 
    (
     case inv_type 
      when 'C' then -[value] 
      else [value] 
     end 
    ) as [Total] 
from INVOICES 
0

송장은 신용 경우 sum(). 간단한 구문은 다음과 같습니다 당신이 열 이름을 탈출해야 할 수도 있으므로 value, 당신의 데이터베이스에서 예약어 될 수 있다고

select cust_no, 
     sum(case when inv_type = 'C' then - value else value end) as total 
from invoices 
group by cust_no; 

참고.

1

당신은 내부의 case 표현을 사용할 수 있습니다 : 당신은 음의 값을 계산 합에 식을 넣을 수 있습니다

select cust_no, sum(value) from (
    select cust_no 
     , case when inv_type='D' then [value] else -[value] end [value]  
    from INVOICES 
) SUMS 
group by cust_no