2016-04-06 14 views
2

私はクエリを実行しようとしていますが、売上の総数は税率によって課税対象と非課税対象になります。グループと正しくグループ化することができない

SELECT  '$' + CAST (SUM (CASE WHEN Taxes.SalesTax = '0.06' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.065' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.07' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.075' THEN Order_Summary.CompleteSalesTax ELSE 0.0 END) AS varchar(10)) 
      AS 'Non-Taxable Sales', 
      '$' + CAST (SUM(CASE WHEN Taxes.SalesTax = '0.06' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.065' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.07' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.075' THEN Order_Summary.CompleteSalesNonTax ELSE 0.0 END) AS varchar(10)) 
      AS 'Taxable Sales', 
      CAST (Taxes.SalesTax * 100 AS VARCHAR) + '%' AS 'Sales Tax Rate' 
FROM ((Order_Label INNER JOIN Order_Summary 
    ON Order_Label.OrderID = Order_Summary.SummID) INNER JOIN Taxes 
    ON Order_Lablel.ZipCodeShipped = Taxes.StateZipCode) 
WHERE (((Order_Label.StateShipped)= 'FLORIDA') 
AND ((Order_Label.O_Date) Between [DATE] And [DATE])) 
GROUP BY TAXES.SalesTax 
HAVING COUNT (*) = 1 

それはそうと、結果を返します。

 |Non-Taxable Sales|Taxable Sales|Sales Tax Rate| 
     |XXXXX.XX   |XXX.XX  |X.XX%   | 
     |XXXXX.XX   |XXX.XX  |X.XX%   | 
     |XXXXX.XX   |XXXX.XX  |X.XX%   | 
     |XXX.XX   |XX.XX  |X.XX%   | 

は何私の問題があり、注文番号と呼ばれるOrder_Labelテーブルの一意の識別子があります。 OrderNumberには値が重複しているので、それらはすべての重複を集約しているので、最終的な値は必要以上に大きくなります。私はグループを持っていて、クエリにDISTINCTを実装しましたが、それでも間違った値を返しています。私がクエリに実装して、正しい値を返し、グループを維持することができるものがありますか?これは、示されているように4行の3列のみを生成します。

+0

「Order_Lablel」とは何ですか?クエリ全体、またはコンパイルされたものを見るのに役立つかもしれません。 – JamieD77

+0

Order_Labelはすべて独自のテーブルで、上記のクエリはクエリ全体であり、現在エラーなしで実行されます。 OrderNumberというOrder_Labelに列名があります。データベースには、OrderNumberが何回発生したかに応じて、それらの値を何度も合計することによって、データベース内に同じ値を持つ同じOrderNumberがいくつか出現します。例: OrderNumber 123が発生すると、値$ 100で4回、クエリでは$ 100でなければならないと$ 400として集計されます。 – walangala

答えて

0

もう一つの方法は、厄介な、それを少し試してみる:

WITH CteData 
AS 
(
SELECT Taxes.SalesTax 
, Order_Summary.CompleteSalesTax 
, Order_Summary.CompleteSalesNonTax 
,Dev.StateZipCode 
FROM 
(
SELECT DISTINCT OrderID,ZipCodeShipped,StateShipped,O_Date FROM Order_Label 
) AS Dev 
INNER JOIN Order_Summary ON Dev.OrderID = Order_Summary.SummID 
INNER JOIN Taxes ON Dev.ZipCodeShipped = Taxes.StateZipCode 
WHERE (((Dev.StateShipped)= 'FLORIDA') 
AND ((Dev.O_Date) Between [DATE] And [DATE])) 
) 

SELECT DevSalesTax.[Non-Taxable Sales],DevSalesNonTax.[Taxable Sales],DevSalesTaxRate.[Sales Tax Rate] 
FROM 

(SELECT [Non-Taxable Sales] = 
      (SUM 
      (CASE WHEN Taxes.SalesTax = '0.06' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.065' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.07' THEN Order_Summary.CompleteSalesTax 
      WHEN Taxes.SalesTax = '0.075' THEN Order_Summary.CompleteSalesTax ELSE 0.0 END)), StateZipCode    
      FROM CteData 
      GROUP BY SalesTax,StateZipCode 
      HAVING COUNT (*) = 1) AS DevSalesTax 
INNER JOIN 
(SELECT [Taxable Sales] = 
      (SUM 
      (CASE WHEN Taxes.SalesTax = '0.06' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.065' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.07' THEN Order_Summary.CompleteSalesNonTax 
      WHEN Taxes.SalesTax = '0.075' THEN Order_Summary.CompleteSalesNonTax ELSE 0.0 END)),StateZipCode    
      FROM CteData 
      GROUP BY SalesTax,StateZipCode 
      HAVING COUNT (*) = 1) AS DevSalesNonTax ON DevSalesNonTax.StateZipCode = DevSalesTax.StateZipCode 
INNER JOIN 
(SELECT [Sales Tax Rate] = Taxes.SalesTax * 100,StateZipCode   
      FROM CteData 
      GROUP BY SalesTax,StateZipCode 
      HAVING COUNT (*) = 1) AS DevSalesTaxRate ON DevSalesTaxRate.StateZipCode = DevSalesNonTax.StateZipCode 
+0

はい、申し訳ありませんが、2つの異なる集計であり、私はコードを編集します。 – walangala

+0

np、私は変更を見て、試してみてください、私は派生テーブルを使用して変更を加えました。 – jthalliens

+0

あなたの助けてくれてありがとうが、それでも同じ結果が出る、それはとても奇妙です。 – walangala

0

を受注が異なるジップコードに出荷することができた場合は、トラブルになるかもしれません。

SELECT '$' + CAST (SUM(CASE WHEN Order_Label.SalesTax = '0.06' THEN Order_Summary.CompleteSalesTax 
          WHEN Order_Label.SalesTax = '0.065' THEN Order_Summary.CompleteSalesTax 
          WHEN Order_Label.SalesTax = '0.07' THEN Order_Summary.CompleteSalesTax 
          WHEN Order_Label.SalesTax = '0.075' THEN Order_Summary.CompleteSalesTax 
          ELSE 0.0 
         END) AS VARCHAR(10)) AS 'Non-Taxable Sales', 
     '$' + CAST (SUM(CASE WHEN Order_Label.SalesTax = '0.06' THEN Order_Summary.CompleteSalesNonTax 
          WHEN Order_Label.SalesTax = '0.065' THEN Order_Summary.CompleteSalesNonTax 
          WHEN Order_Label.SalesTax = '0.07' THEN Order_Summary.CompleteSalesNonTax 
          WHEN Order_Label.SalesTax = '0.075' THEN Order_Summary.CompleteSalesNonTax 
          ELSE 0.0 
         END) AS VARCHAR(10)) AS 'Taxable Sales', 
     CAST (Order_Label.SalesTax * 100 AS VARCHAR) + '%' AS 'Sales Tax Rate' 
FROM Order_Summary 
     INNER JOIN (
      SELECT DISTINCT 
        Order_Label.OrderID, 
        Taxes.SalesTax 
      FROM Order_Label 
        INNER JOIN Taxes ON Order_Label.ZipCodeShipped = Taxes.StateZipCode 
      WHERE Order_Label.StateShipped = 'FLORIDA' 
        AND Order_Label.O_Date BETWEEN [DATE] AND [DATE] 
     ) Order_Label ON Order_Label.OrderID = Order_Summary.SummID 
GROUP BY Order_Label.SalesTax 
HAVING COUNT(*) = 1 
関連する問題