2017-11-07 4 views
1

以下のクエリを適切に1つのステートメントに記述しようとしています。これらのクエリを単一のステートメントに最も適切に書く方法

  • "をCoverPageIDは" CoverPageOthersCosts テーブルに主キー列です。
  • CoverPageID」は、CoverPagesの主キー列です。
  • OurFileNo」は、CoverPagesテーブルの外部キー列です。

SELECT SUM(o.OutPrice) AS ShareOnSaving 
FROM CoverPageOthersCosts AS o WITH 
    INNER JOIN CoverPages AS c WITH ON o.CoverPageID = c.CoverPageID 
WHERE c.OurFileNo = @OurFileNo AND o.DescID IN (1, 2, 3) 

SELECT SUM(o.OutPrice) AS CommunicationCost 
FROM CoverPageOthersCosts AS o WITH 
    INNER JOIN CoverPages AS c WITH ON o.CoverPageID = c.CoverPageID 
WHERE c.OurFileNo = @OurFileNo AND o.DescID = 6 

SELECT SUM(o.OutPrice) AS HandlingFee 
FROM CoverPageOthersCosts AS o WITH 
    INNER JOIN CoverPages AS c WITH ON o.CoverPageID = c.CoverPageID 
WHERE c.OurFileNo = @OurFileNo AND o.DescID IN (7, 8, 9) 

答えて

1

条件付き集約用途:

SELECT 
    SUM(CASE WHEN o.DescID IN (1,2,3) THEN o.OutPrice END) AS ShareOnSaving, 
    SUM(CASE WHEN o.DescID = 6  THEN o.OutPrice END) AS CommunicationCost, 
    SUM(CASE WHEN o.DescID IN (7,8,9) THEN o.OutPrice END) AS HandlingFee 
FROM CoverPageOthersCosts o 
INNER JOIN CoverPages c 
    ON o.CoverPageID = c.CoverPageID 
WHERE 
    c.OurFileNol = @OurFileNo; 

我々はCASE式を使用して、テーブルの上に単一のパスで、同時にあなたの3つの和のそれぞれを計算することができます。ただし、実際にはそれぞれの合計を別々に行うことでパフォーマンスが向上する可能性があります。

0

この

SELECT 
    SUM(
     CASE WHEN o.DescID IN (1, 2, 3) THEN o.OutPrice ELSE 0 END 
    ) AS ShareOnSaving, 
    SUM(CASE WHEN o.DescID 6 THEN o.OutPrice ELSE 0 END) AS CommunicationCost, 
    SUM(CASE WHEN o.DescID IN (7, 8, 9) THEN o.OutPrice ELSE 0 END) AS HandlingFee 
FROM CoverPageOthersCosts AS o WITH 
    INNER JOIN CoverPages AS c WITH ON o.CoverPageID = c.CoverPageID 
WHERE c.OurFileNo = @OurFileNo 
のようなケースを追加することでこれを実現するための簡単な方法
関連する問題