簡體   English   中英

SQL Server查詢總數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM