[英]Total SQL Server query
我需要一個查詢,該查詢總計其他列
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
日期之間的結果(按用戶和日期過濾)應為:
在01/03/2016至31/03/2016之間
User Total moto car
------------------------------
danny 15.000 2 1
我需要什么查詢?
嘗試Pivot
SELECT * FROM
(
SELECT User,sales,amount,datename(month, date)
FROM YoyrTable
)A
PIVOT
(
SUM(amount)
FOR sales in ([car],[moto])
)B
另一種方法:
;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
您的實際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的答案應該會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.