【问题标题】:Cumulative sum based on months in a year with NULL Months基于一年中月份的累积总和,月份为 NULL
【发布时间】:2013-12-02 22:25:00
【问题描述】:

我正在尝试返回系统中为选定的销售人员和选定的年份输入的所有潜在客户的摘要。输入的日期是日期时间,我正在旋转数据以显示它按月细分。

第一个查询返回每个月的推荐数量,第二个查询显示累计输入的推荐数量。我已经让它们正确显示,但包含空值的月份除外。具有空值的月份我想在这种情况下显示上个月的值。

我目前使用的是 T-SQL 2012。

SELECT 'Number of Referrals' AS Measure,[1] AS Jan, [2] AS Feb, [3] AS Mar, [4] AS Apr, 
[5] AS May, [6] AS Jun, [7] AS Jul, [8] AS Aug, [9] AS Sep, [10] AS Oct, [11] AS Nov, [12] AS Dec
FROM
(
SELECT ISNULL(COUNT(DISTINCT CSCU.ClientID), 0) AS Referrals, DATEPART(M, CS.DateAdded) AS Months
FROM ClientTracker.dbo.ClientService CS
INNER JOIN ClientTracker.dbo.ClientServiceContactUser CSCU
ON CS.ClientID = CSCU.ClientID
AND CS.ServiceID = CSCU.ServiceID
WHERE UserId = @UserID
AND DATEPART(YEAR, CS.DateAdded) = @Year
AND CSCU.ServiceID = 30
GROUP BY DATEPART(M, CS.DateAdded)
) AS S
PIVOT
(
SUM(Referrals)
FOR [Months] IN ([1], [2], [3], [4], 
    [5], [6], [7], [8], [9], [10], [11], [12])
)AS PV

UNION

SELECT 'Number of Referrals Cumulative' AS Measure,[1] AS Jan, [2] AS Feb, [3] AS Mar, [4] AS Apr, [5] AS May, [6] AS Jun, [7] AS Jul, [8] AS Aug, [9] AS Sep, [10] AS Oct, [11] AS Nov, [12] AS Dec
FROM
(
SELECT DATEPART(M, CS.DateAdded) AS Months, 
SUM(COUNT(CSCU.ClientID)) OVER (ORDER BY DATEPART(M, CS.DateAdded)) AS Cumulative
FROM ClientTracker.dbo.ClientService CS
INNER JOIN ClientTracker.dbo.ClientServiceContactUser CSCU
ON CS.ClientID = CSCU.ClientID
AND CS.ServiceID = CSCU.ServiceID
WHERE UserId = @UserID
AND DATEPART(YEAR, CS.DateAdded) = @Year
AND CSCU.ServiceID = 30
GROUP BY DATEPART(M, CS.DateAdded)
) AS S
PIVOT
(
SUM(Cumulative)
FOR [Months] IN ([1], [2], [3], [4], 
    [5], [6], [7], [8], [9], [10], [11], [12])
)AS PV

【问题讨论】:

    标签: sql-server tsql sql-server-2012 pivot


    【解决方案1】:

    您可以使用coalesce() 函数。它接受尽可能多的参数并返回第一个非空值。 因此,在您的示例中,将查询重写为

    SELECT 'Number of Referrals' AS Measure,[1] AS Jan, coalesce([2],[1]) AS Feb, .....
    

    COALESCE() on MSDN

    【讨论】:

    • 我忘记了 COALESCE,这正是我需要的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2022-11-27
    相关资源
    最近更新 更多