0

こんにちは、2 つのテーブルがあり、このような 2 つの列があります。

DocumentNumber       Price

そして、テーブルに同じDocumentNumbers、各ドキュメント番号のカウント、および価格差を表示しました。これが私のクエリです

select DocumentNumber, max(cnt_s) as documentNumber1, max(cnt_s2) as documentNumber1,
       max(price_s) - max(price_s2) as PriceDifference
from ((select DocumentNumber, count(*) as cnt_s, 0 as cnt_s2,
              sum(price) as price_s, 0 as price_s2
       from Sheet s
       group by DocumentNumber
      ) union all
      (select DocumentNumber, 0, count(*) as cnt_s2,
              0, sum(price) as price_s2
       from Sheet2 s2
       group by DocumentNumber
      )
     ) t
group by DocumentNumber;

価格差の前に、シート 1 の価格とシート 2 の価格のみを追加したい。いくつかのクエリを提案してください。

4

2 に答える 2

1

試す

SELECT DocumentNumber, 
       MAX(cnt_s) cnt_s, 
       MAX(cnt_s2) cnt_s2,
       MAX(price_s) price_s,
       MAX(price_s2) price_s2,
       MAX(price_s) - MAX(price_s2) PriceDifference
 FROM 
(
  SELECT DocumentNumber, 
         COUNT(*)   cnt_s, 
         0          cnt_s2, 
         SUM(price) price_s, 
         0          price_s2
    FROM Sheet
   GROUP BY DocumentNumber
  UNION ALL    
  SELECT DocumentNumber, 
         0          cnt_s, 
         COUNT(*)   cnt_s2,
         0          price_s, 
         SUM(price) price_s2
    FROM Sheet2
   GROUP BY DocumentNumber
) q
 GROUP BY DocumentNumber

これがSQLFiddle のデモです。

元のクエリでは、返してはならない同じエイリアスの下であることに注意max(cnt_s)してmax(cnt_s2)くださいdocumentNumber1

UPDATEあなたが尋ねるように、ここにJOIN

SELECT s.DocumentNumber, 
       s.cnt_s, 
       s2.cnt_s2, 
       s.price_s,
       s2.price_s2,
       s.price_s - s2.price_s2 PriceDifference
 FROM 
(
  SELECT DocumentNumber, 
         COUNT(*)   cnt_s, 
         SUM(price) price_s
    FROM Sheet
   GROUP BY DocumentNumber
) s JOIN     
(
  SELECT DocumentNumber, 
         COUNT(*)   cnt_s2,
         SUM(price) price_s2
    FROM Sheet2
   GROUP BY DocumentNumber
) s2 ON s.DocumentNumber = s2.DocumentNumber

SQLFiddleのデモ (両方のクエリを使用) を次に示します。

このクエリは、常に と の両方があることを前提としていることに注意してDocumentNumberください。不一致は によって除外されます。したがって、外部結合を使用する必要がある場合があります。SheetSheet2JOIN

于 2013-06-22T05:39:24.363 に答える
0

タイプミスを含むことができます干し草。エラーが発生した場合は、お知らせください

 SELECT temp.DN, MAX(temp.CNT1) as documentNumber1, MAX(temp.CNT2) as documentNumber1,
 MAX(temp.P1) - MAX(temp.P2) as PriceDifference, temp.P1 as Price1 , 
 temp.P2 as Price2 FROM 
 ((SELECT tbl.DocumentNumber 
 as DNumber,tbl.cnt_s as CNT1,tbl.cnt_s2 as CNT2,
 tbl.price_s as P1,tbl.price_s2 as P2 FROM 
    (select DocNum, count(*) as cnt_s, 0 as cnt_s2,
    SUM(price) as price_s, 0 as price_s2
    FROM Sheet s) 
    UNION ALL
    (SELECT DocNum, 0, count(*) as cnt_s2,
     0, sum(price) as price_s2
     FROM Sheet2 s2
     )
  ) as tbl GROUP BY tbl.DoucmentNumber
 ) temp
group by temp.DN;
于 2013-06-22T05:54:04.583 に答える