2012-06-23 4 views
0

간단히 말해서 열의 총 합계를 계산해야합니다. 문제는 별도의 열에 표시되어있는 것처럼 일부 값이 음수 여야한다는 것입니다. 예를 들어, 아래 표는 (4 + 3-5 + 2-2 = 2)의 결과를 나타냅니다. select 절에서 하위 쿼리를 사용하여이 작업을 시도했지만 테이블의 다른 부분에 대한 분석을 추가 할 때 불필요하게 복잡하고 확장하기 어려워 보입니다. 어떤 도움을 많이 주시면 감사하겠습니다!다른 필드를 기반으로 값을 더하거나 뺄 때 사용하는 SQL 쿼리

Sign  Value 
Pos  4 
Pos  3 
Neg  5 
Pos  2 
Neg  2 

답변

5

SQL의 대부분의 버전에서 작동해야 CASE 문을 사용하여 :

SELECT SUM(CASE 
       WHEN t.Sign = 'Pos' THEN t.Value 
       ELSE t.Value * -1 
      END 
     ) AS Total 
FROM YourTable AS t 
+0

:)를 선택 저장하지만,이 구조는 완벽하게 작동된다

이 작동합니다. 감사! –

+0

나는 여러 번 이런 종류의 일들을 접했고 지금까지 그것을 이해할 수 없었습니다. 왜 당신이 말해 줄 수 있을지 궁금합니다. 어떤 사람들 (예를 들어)이'-Value' 대신'Value * -1' (또는'Value * (-1)')을 쓰는 경향이 있습니까? 전자가 후자보다 더 명확 해 보입니까, 아니면 실종 될 수있는 '가치'에 대해 (어떤 의미에서든) 신뢰할 수 없거나 비효율적 인 것이 있습니까? 나는 이것에 대해 호기심 이상으로 생각하고 싶습니다만, 저보다 저를 괴롭히는 것으로 의심됩니다. :) +1, 솔루션에. –

+0

@AndriyM 나는 그것이 모두 개인적 취향에 달려 있다고 생각한다. 나는 같은 응답을 제공하기 위해'-t.Value'를 사용할 수 있었고, 오랫동안'* -1' 접근법을 사용 했었습니다. 기본값으로 보이는 것 같습니다. –

2

이 시도 :

SELECT SUM(IF(sign = 'Pos', Value, Value * (-1))) as total FROM table 
+0

더 나은 또 다른, 오른쪽에 도움이 모든 아이디어를 – YavgenyP

0
select a= sum(Value) where Sign like 'pos' 
select b = sum(Value) where Signe like 'neg' 
select total = a-b 

이 당신이 사용을 DB되는 말을 didnt는하지만 거기에 어떤 DB에 adapat하기 쉽게해야하기 때문에, ABIT SQL 불가지론이다 .

1

나는 데이터베이스와 오라클 11g를 사용하여 동일한 테이블에 다른 필드의 값에 따라 테이블에 하나의 필드에서 행을 추가 오전 사용자 인터페이스로 SQL 개발자. 내 대답에 비해

SELECT COUNTRY_ID, SUM(
    CASE 
     WHEN ACCOUNT IN 'PTBI' THEN AMOUNT 
     WHEN ACCOUNT IN 'MLS_ENT' THEN AMOUNT 
     WHEN ACCOUNT IN 'VAL_ALLOW' THEN AMOUNT 
     WHEN ACCOUNT IN 'RSC_DEV' THEN AMOUNT * -1 
    END) AS TI 
FROM SAMP_TAX_F4 
GROUP BY COUNTRY_ID; 
관련 문제