在SQL Server中获取计数百分比

时间:2018-08-08 20:19:03

标签: sql sql-server ssms

我正在构建一个SQL Server查询,该查询按月获取从某些来源生成的销售线索的数量。这是告诉我每月计数的查询。但我想添加一列,以显示该月的潜在客户占该月所有潜在客户的总数。我不清楚如何执行此操作。有什么帮助吗?

SELECT FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date]
    , 'yyyy-MM') AS 'YYYY-MM'
    , 'Kiosk-Mall' AS 'Lead Source'
    , COUNT(*) AS 'Monthly Total From That Lead Source'
FROM [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08] 
WHERE [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Lead Source] =
    'Kiosk-Mall'
GROUP BY FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date], 'yyyy-MM')
ORDER BY FORMAT([ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08].[Created Date], 'yyyy-MM');

1 个答案:

答案 0 :(得分:2)

您可以使用条件聚合-基本上将WHERE条件移动到聚合函数参数中的CASE表达式中。

SELECT FORMAT(l.[Created Date], 'yyyy-MM') AS YYYYMM,
       'Kiosk-Mall' AS Lead_Source,
       SUM(CASE WHEN l.[Lead Source] = 'Kiosk-Mall' THEN 1 ELSE 0 END) AS [Monthly Total From That Lead Source],
       AVG(CASE WHEN l.[Lead Source] = 'Kiosk-Mall' THEN 1.0 ELSE 0 END) AS proportion_of_total
FROM [ProspectData].[dbo].[Real Estate.KPC.Leads.2018-08-08] l
GROUP BY FORMAT(l.[Created Date], 'yyyy-MM')
ORDER BY YYYYMM

注意:

  • 表别名使查询更易于编写和阅读。
  • 最好选择不需要转义的列别名(即,没有空格,没有标点符号)。