2016-04-26 19 views
-1

私は、ユーザー、日付ごとに日付フィルターの間で和他の人の列に合計SQL Serverがクエリ

User  sales amount date 
-------------------------------------- 
danny car  10.000 25/02/2016 
danny moto  5.000 26/02/2016 
danny car  10.000 25/03/2016 
danny moto  5.000 26/03/2016 
danny moto  5.000 26/03/2016 
danny car  10.000 25/04/2016 
danny moto  5.000 26/04/2016 
danny car  10.000 25/05/2016 
danny moto  5.000 26/05/2016 

の検索結果を合計し、クエリを必要とするべきであることによって:

2016年1月3日の間、および31/03/2016

User Total moto car  
------------------------------ 
danny 15.000 2  1  

どのようなクエリが必要ですか?

+6

私たちに見せてください**あなたの努力はこれまでのところ**最初に!何を試しましたか?あなたはどこにいるのですか?私たちは**お手伝いします** - しかし**あなただけのコード**を書くことはありません! –

答えて

1

は試してみてくださいPivot

SELECT * FROM 
(
    SELECT User,sales,amount,datename(month, date) 
    FROM YoyrTable 
)A 
PIVOT 
(
    SUM(amount) 
    FOR sales in ([car],[moto]) 
)B 
1

別のアプローチ:

;WITH cte AS (
SELECT * 
FROM (VALUES 
('danny', 'car', 10.000, '2016-02-15'), 
('danny', 'moto', 5.000, '2016-02-26'), 
('danny', 'car', 10.000, '2016-03-25'), 
('danny', 'moto', 5.000, '2016-03-26'), 
('danny', 'moto', 5.000, '2016-03-26'), 
('danny', 'car', 10.000, '2016-04-25'), 
('danny', 'moto', 5.000, '2016-04-26'), 
('danny', 'car', 10.000, '2016-05-25'), 
('danny', 'moto', 5.000, '2016-05-26') 
) as t([User], sales, amount, [date]) 
) 

SELECT [user], 
     SUM(amount) as Total, 
     SUM(CASE WHEN sales = 'moto' THEN 1 ELSE 0 END) as moto, 
     SUM(CASE WHEN sales = 'car' THEN 1 ELSE 0 END) as car, 
     DATENAME(Month,[date]) as [date] 
FROM cte 
GROUP BY [user], DATENAME(Month,[date]),DATEPART(Month,[date]), DATEPART(Year,[date]) 
ORDER BY DATEPART(Month,[date]), DATEPART(Year,[date]) 

出力:クエリで

user Total moto car date 
danny 15.000 1  1 February 
danny 20.000 2  1 March 
danny 15.000 1  1 April 
danny 15.000 1  1 May 

ではなく、あなたのテーブル名を入れcte

1

何あなたPIVOT、実際のようになります。..

SELECT [User], 
     Total, 
     [moto], 
     [car], 
     [date] 
FROM 
(
    SELECT [User], 
      sales, 
      DATENAME(MONTH,date) [date], 
      SUM(amount) OVER (PARTITION BY [User], DATENAME(MONTH,date)) [Total] 
    FROM cte 
) T 
PIVOT 
(
    COUNT(sales) 
    FOR sales IN ([car], [moto]) 
) p 

@ gofr1によって答えは、しかし、より良い実行する必要があります。