2013-11-20 4 views
1
(SELECT ID_OF, Col, BNT,  
     SUM(size1) As size1, 
     SUM(size2) As size2, 
     SUM(size3) as size3, 
     SUM(size4) as size4, 
     SUM(size5) as size5, 
     SUM(size6)as size6, 
     SUM(size7) as size7, 
     SUM(size8) as size8, 
     SUM(size9) as size9, 
     SUM(size10) as size10, 
     SUM(Total) as Total,ref 

FROM tblTailleOFALL 
GROUP BY ID_OF, Col, BNT, ref) 

(SELECT ID_OF, Col, BNT,  
     SUM(size1) As size1, 
     SUM(size2) As size2, 
     SUM(size3) as size3, 
     SUM(size4) as size4, 
     SUM(size5) as size5, 
     SUM(size6)as size6, 
     SUM(size7) as size7, 
     SUM(size8) as size8, 
     SUM(size9) as size9, 
     SUM(size10) as size10, 
     SUM(Total) as Total,ref 

FROM tblTailleALL 
GROUP BY ID_OF, Col, BNT, ref) 

나는 SQL 서버에서이 쿼리를했고,이 결과합계와 두 개의 SQL 쿼리 결과의 차이

Id_OF Col BNT size1 size2 size3 size4 size5 size6 size7 size8 size9 size10 Total ref 
--------- 
    37623 738 A  60  60  60  30  30  0  0  0  0  0  240  131380 

를 얻을이 :

Id_OF Col BNT size1 size2 size3 size4 size5 size6 size7 size8 size9 size10 Total ref 
--------- 
    37623 738 A  60  60  60  30  28  0  0  0  0  0  238  131380 

어떻게이 두 결과를 뺄 수 있습니다 내 질문! 나는

Id_OF Col BNT size1 size2 size3 size4 size5 size6 size7 size8 size9 size10 Total ref 
--------- 
    37623 738 A  0  0  0  0  2  0  0  0  0  0   2  131380 

감사 힙

답변

1

이것은 정말 친숙한 것 같습니다 ... 하지만이 방법에 대해?

SELECT a.ID_OF, a.Col, a.BNT,  
    SUM(a.size1) - SUM(b.size1) As size1, 
    SUM(a.size2) - SUM(b.size2) As size2, 
    SUM(a.size3) - SUM(b.size3) As size3, 
    SUM(a.size4) - SUM(b.size4) As size4, 
    SUM(a.size5) - SUM(b.size5) As size5, 
    SUM(a.size6) - SUM(b.size6) As size6, 
    SUM(a.size7) - SUM(b.size7) As size7, 
    SUM(a.size8) - SUM(b.size8) As size8, 
    SUM(a.size9) - SUM(b.size9) As size9, 
    SUM(a.size10) - SUM(b.size10) As size10, 
    SUM(a.total) - SUM(b.total) As total, 
    a.ref 
    FROM tblTailleOFALL a 
    JOIN tblTailleALL b 
     ON a.ID_OF = b.ID_OF 
    AND a.Col = b.Col 
    AND a.BNT = b.BNT 
GROUP BY a.ID_OF, a.Col, a.BNT, a.ref 
1

결과로이를 얻어야한다, 실제 로직에 따라,하지만 주어진 질문에 대해, 나는 단순히 말을 함께 공통 테이블 표현식 중 하나를 사용하여 가입 것 존재 방법의 수 , 서브 u 리 또는 임시 테이블을 작성한 후 해당 크기 컬럼에서 크기 컬럼을 빼십시오. 이 같은

뭔가 : 말했듯이

;WITH T1 AS 
(
    SELECT ID_OF, Col, BNT,  
     SUM(size1) As size1, 
     SUM(size2) As size2, 
     SUM(size3) as size3, 
     SUM(size4) as size4, 
     SUM(size5) as size5, 
     SUM(size6)as size6, 
     SUM(size7) as size7, 
     SUM(size8) as size8, 
     SUM(size9) as size9, 
     SUM(size10) as size10, 
     SUM(Total) as Total,ref 

FROM tblTailleOFALL 
GROUP BY ID_OF, Col, BNT, ref) , 
T2 AS 
(SELECT ID_OF, Col, BNT,  
     SUM(size1) As size1, 
     SUM(size2) As size2, 
     SUM(size3) as size3, 
     SUM(size4) as size4, 
     SUM(size5) as size5, 
     SUM(size6)as size6, 
     SUM(size7) as size7, 
     SUM(size8) as size8, 
     SUM(size9) as size9, 
     SUM(size10) as size10, 
     SUM(Total) as Total,ref 

FROM tblTailleALL 
GROUP BY ID_OF, Col, BNT, ref) 
SELECT 
T1.size1 - t2.size1 
..... 
..... 
..... 
FROM T1 
INNER JOIN T2 ON T1.ID_OF = T2.ID_OF 

가 (단지 설명하기 위해 예를 들어) 그들은 두 개의 쿼리 사이의 1에 1을 일치하지 않는 경우 가입

를 외부를 사용하지만 - 여러 가지 방법이 존재합니다 이렇게.

당신은 또한 하나의 쿼리를 만들 수 있습니다 - 나는 용의자입니다 - 그리고 SUM과 GROUP BY 앞에서 빼기도합니다.

+0

잘못된를 키워드 'ON'근처의 구문. – user3012608

+0

extra extra) –

0

그냥 ID_OF에 의해 두 쿼리 가입 및 외부 쿼리에서 각 열을 빼기 :

SELECT a.ID_OF, 
    a.Col, 
    a.BNT, 
    a.size1 - b.size1 AS size1, 
    a.size2 - b.size2 AS size2, 
    a.size3 - b.size3 AS size3, 
    a.size4 - b.size4 AS size4, 
    a.size5 - b.size5 AS size5, 
    a.size6 - b.size6 AS size6, 
    a.size7 - b.size7 AS size7, 
    a.size8 - b.size8 AS size8, 
    a.size9 - b.size9 AS size9, 
    a.size19 - b.size10 AS size10, 
    a.total - b.total AS total, 
    a.ref 
FROM (
    SELECT ID_OF, 
    Col, 
    BNT, 
    SUM(size1) AS size1, 
    SUM(size2) AS size2, 
    SUM(size3) AS size3, 
    SUM(size4) AS size4, 
    SUM(size5) AS size5, 
    SUM(size6) AS size6, 
    SUM(size7) AS size7, 
    SUM(size8) AS size8, 
    SUM(size9) AS size9, 
    SUM(size10) AS size10, 
    SUM(Total) AS Total, 
    ref 
    FROM tblTailleOFALL 
    GROUP BY ID_OF, 
    Col, 
    BNT, 
    ref 
) a 
INNER JOIN (
    SELECT ID_OF, 
    Col, 
    BNT, 
    SUM(size1) AS size1, 
    SUM(size2) AS size2, 
    SUM(size3) AS size3, 
    SUM(size4) AS size4, 
    SUM(size5) AS size5, 
    SUM(size6) AS size6, 
    SUM(size7) AS size7, 
    SUM(size8) AS size8, 
    SUM(size9) AS size9, 
    SUM(size10) AS size10, 
    SUM(Total) AS Total, 
    ref 
    FROM tblTailleALL 
    GROUP BY ID_OF, 
    Col, 
    BNT, 
    ref 
) b ON a.ID_OF = b.ID_OF 
+0

ON – user3012608

+0

@ user3012608 근처의 구문이 잘못되었습니다. 예, 오류가있었습니다. 나는 그것을 고쳤다. –

0
SELECT a.ID_OF, a.Col, a.BNT, 
     a.size1 - b.size1 as size1, 
     a.size2 - b.size2 as size2, 
a.size3 - b.size3 as size3, 
a.size4 - b.size4 as size4, 
a.size5 - b.size5 as size5, 
a.size6 - b.size6 as size6, 
a.size7 - b.size7 as size7, 
a.size8 - b.size8 as size8, 
a.size9 - b.size9 as size9, 
a.size10 - b.size10 as size10, 
a.Total - b.Total as Total, 
a.ref 

    (SELECT ID_OF, Col, BNT,  
      SUM(size1) As size1, 
      SUM(size2) As size2, 
      SUM(size3) as size3, 
      SUM(size4) as size4, 
      SUM(size5) as size5, 
      SUM(size6)as size6, 
      SUM(size7) as size7, 
      SUM(size8) as size8, 
      SUM(size9) as size9, 
      SUM(size10) as size10, 
      SUM(Total) as Total,ref 

    FROM tblTailleOFALL 
    GROUP BY ID_OF, Col, BNT, ref) AS a 
    inner join 
    (SELECT ID_OF, Col, BNT,  
      SUM(size1) As size1, 
      SUM(size2) As size2, 
      SUM(size3) as size3, 
      SUM(size4) as size4, 
      SUM(size5) as size5, 
      SUM(size6) as size6, 
      SUM(size7) as size7, 
      SUM(size8) as size8, 
      SUM(size9) as size9, 
      SUM(size10) as size10, 
      SUM(Total) as Total,ref 

    FROM tblTailleALL 
    GROUP BY ID_OF, Col, BNT, ref) AS b on a.ID_OF = b.ID_OF 
1
당신이 테이블에 가입하고 값을 뺄 수

:

SELECT coalesce(a.ID_OF ,b.id) as id 
    , coalesce(a.Col, b.Col) as Col 
    , coalesce(a.BNT, b.BNT) as BNT 
    , SUM(a.size1 -b.size1) As size1 
    , SUM(a.size2 -b.size2) As size2 
    , SUM(a.size3 -b.size3) as size3 
    , SUM(a.size4 -b.size4) as size4 
    , SUM(a.size5 -b.size5) as size5 
    , SUM(a.size6 -b.size6) as size6 
    , SUM(a.size7 -b.size7) as size7 
    , SUM(a.size8 -b.size8) as size8 
    , SUM(a.size9 -b.size9) as size9 
    , SUM(a.size10-b.size10) as size10 
    , SUM(a.Total -b.Total) as Total 
    , coalesce (a.ref, b.ref) as ref 
FROM tblTailleOFALL a 
full outer join 
    tblTailleALL b 
on ( a.id = b.id 
    and a.Col = b.Col 
    and a.BNT = b.BNT 
    and a.ref = b.ref) 
group by 
     coalesce(a.ID_OF ,b.id) 
    , coalesce(a.Col, b.Col) 
    , coalesce(a.BNT, b.BNT) 
    , coalesce (a.ref, b.ref)