2013-11-20 56 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 Server此查詢並得到這樣的結果之和爲兩個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

有許多方法存在,這取決於你的實際的邏輯,但對於你的特定問題,我會說只是在一起使用任何公共表表達式加入他們的行列,子查詢或臨時表,然後從相應的大小列中減去大小列。

事情是這樣的:

;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

刪除額外) –

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 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)