2016-09-02 7 views
0

のは、私はわずか7日間利用可能(SUN - SAT)とSQL Serverで、次の表を持っていると仮定しましょう: 受注SQL Serverグループ

| Day | ProductType | Price | 
| SUN | 1   | 10 | 
| MON | 1   | 15 | 
| MON | 2   | 20 | 
| MON | 3   | 10 | 
| TUE | 1   | 5  | 
| TUE | 3   | 5  | 
... 

私はそのような方法でグループにデータを必要とします> 1.

でProductType FirstProductTypeTotalがでProductType = 1であり、RestProductTypesTotalであり

| Day | FirstProductTypeTotal | RestProductsTypesTotal | GrandTotal | 
| SUN | 10     | 0      | 10   | 
| MON | 15     | 30      | 45   | 
| TUE | 5      | 5      | 10   | 
... 

:それぞれ異なる日まで料金の合計を見るとでProductTypeの二つのグループ(= 1および> 1)〜

Select Day, SUM(Price) as FirstTotal from Orders where ProductType = 1 group by Day 

Select Day, SUM(Price) as SecondTotal from Orders where ProductType > 1 group by Day 

そしてそれぞれの総計を取得するには、コード内で手動FirstTotalとSecondTotalを追加:

それは選択の代わりに、二つの異なる選択を書く1でこれを選択することが可能です曜日?

+0

case文を使用できます。 –

答えて

2

ユースケース式

Select Day, SUM(CASE WHEN ProductType = 1 THE Price ELSE 0 END) AS FirstTotal, 
      SUM(CASE WHEN ProductType > 1 THE Price ELSE 0 END) AS SecondTotal, 
      SUM(Price) AS GrandTotal 
FROM Orders 
group by Day 
+0

'WHERE group by' ??? – techspider

+0

@techspiderそのタイプミス、ありがとう;) –

+1

ありがとう!それが助けになりました。 –

0

は、条件付き集計してみてください。

サンプルデータ。

CREATE TABLE #Orders ([Day] varchar(10), ProductType int, Price int) 
INSERT INTO #Orders ([Day],ProductType, Price) 
VALUES 
('SUN',1,10) 
,('MON',1,15) 
,('MON',2,20) 
,('MON',3,10) 
,('TUE',1,5) 
,('TUE',3,5) 

定義により、SQL Serverが特定の順序でデータが格納されていないので、あなたはわずか数日の順序を整理する必要があると思い

SELECT 
    o.[Day] 
    ,SUM(CASE WHEN o.ProductType = 1 THEN o.Price ELSE 0 END) FirstTotal 
    ,SUM(CASE WHEN o.ProductType > 1 THEN o.Price ELSE 0 END) SecondTotal 
    ,SUM(o.Price) GrandTotal 
FROM #Orders o 
GROUP BY o.[Day] 

結果

Day FirstTotal SecondTotal GrandTotal 
MON 15   30   45 
SUN 10   0   10 
TUE 5   5   10 

関連する問題