2016-10-20 16 views
1

ここに最初に投稿してください。グループ句のケース

以下のクエリは正常に実行され、必要な数字が表示されます。問題は、クエリを実行するためにGROUP BY句にoh.paidカラムを持つ必要があることです。これにより、oh.unitnameごとに2つの結果が得られます。

私は検索していくつかの関連問題を発見しましたが、解決策は私のクエリでは機能しませんでした。

正しい方向に私を向けることができるいくつかの友好的な魂がほしいと思う。

SELECT oh.unitname, 
    oh.CostCode, 
    CASE 
     WHEN oh.Paid = 1 
     THEN 'Kr '+CONVERT(VARCHAR(50), CAST(SUM(oh.paidsum * oh.ExchangeRate) AS MONEY), -1) 
     ELSE 'Kr '+CONVERT(VARCHAR(50), CAST(SUM(oh.totalprice * oh.ExchangeRate) AS MONEY), -1) 
    END AS Price 
    FROM dbo.OrderHead oh 
    WHERE oh.RowDeleted = 0 
    AND oh.UnitName LIKE '%%' 
    AND oh.DateCreated >= '2016-01-01' 
    AND oh.DateCreated < '2016-12-30' 
    AND oh.CostCode = 1 
    GROUP BY oh.UnitName, 
    oh.CostCode, 
    oh.Paid 
    ORDER BY oh.UnitName; 
+0

結果に1つまたは2つの合計が欲しいですか? – jarlh

+0

複数の行がありますか?1つはoh.paid = 1、もう1つは/ sです.ha.paid <> 1ですか? –

+0

こんにちは、お支払いの場合は1、支払いがない場合は0です。私は支払って支払っていない合計を得るために2つを合計したいと思います...意味があることを望みます。 – Tommel

答えて

0

私はあなたがこれをしたいと思う:

SELECT oh.unitname, oh.CostCode, 
     ('Kr ' + 
     CONVERT(VARCHAR(50), CAST(SUM(CASE WHEN oh.PAID = 1 THEN oh.paidsum * oh.ExchangeRate ELSE 0 END) AS MONEY), -1) 
     ) as PaidSum, 
     ('Kr ' + 
     CONVERT(VARCHAR(50), CAST(SUM(CASE WHEN oh.PAID <> 1 THEN oh.paidsum * oh.ExchangeRate ELSE 0 END) AS MONEY), -1) 
     ) as NotPaidSum 
FROM dbo.OrderHead oh 
WHERE oh.RowDeleted = 0 AND 
     oh.UnitName LIKE '%%' AND 
     oh.DateCreated >= '2016-01-01' AND 
     oh.DateCreated < '2016-12-30' 
     oh.CostCode = 1 
GROUP BY oh.UnitName, oh.CostCode, 
ORDER BY oh.UnitName; 

これは、2つの列に合計を分割します。 oh.PaidNULLではないとみなします。可能であれば、第2の条件を変更するのは簡単です。

+0

ありがとうございます。ちょうどあなたのクエリを試みたが、私はそれが必要ではなかった。私は "PaidSum"と "NotPaidSum"を合計したい。 – Tommel

+0

@ Tommel。 。 。次に、その列だけを保持し、他の列は保持しないでください。 –

+0

私はあなたが上記の私のコメントを誤解する方法を見ることができます。あなたが私を助けたクエリは2つの値を生成します、私は今これらの2つの値を合計する必要があります。 – Tommel

0

2つの値を1に変換するにはSUMを使用しますか?そう、これをしようとした場合:

select a.Unitname,a.CostCode, SUM(a.Price) as Price 
from 
(
SELECT oh.unitname, 
oh.CostCode, 
CASE 
    WHEN oh.Paid = 1 
    THEN 'Kr '+CONVERT(VARCHAR(50), CAST(SUM(oh.paidsum * oh.ExchangeRate) AS MONEY), -1) 
    ELSE 'Kr '+CONVERT(VARCHAR(50), CAST(SUM(oh.totalprice * oh.ExchangeRate) AS MONEY), -1) 
END AS Price 
FROM dbo.OrderHead oh 
WHERE oh.RowDeleted = 0 
AND oh.UnitName LIKE '%%' 
AND oh.DateCreated >= '2016-01-01' 
AND oh.DateCreated < '2016-12-30' 
AND oh.CostCode = 1 
) 
GROUP BY a.UnitName, 
a.CostCode 
ORDER BY a.UnitName 

これはcase文で行われた初期の変更後に支払わ列を合計することができます。

私は、これは意味

0

が原因であなたのoh.unitnameの一部についても、および/またはoh.paidが異なるoh.costname可能性があります願っています。それで、それは別々に支払われた= 1のためにグループ化されます

関連する問題