我无法在未通过 group by 子句过滤的情况下获取数据并在选择中对其进行分类。
我有一个表格,其中包含客户满意度调查的结果,其中包括为客户提供服务的办公室、为他提供的服务类型以及客户给出的分数。
我需要知道 NPS 分数并按业务和办公室对它们进行分组。(不包括 ID 列,因为我几乎装不下它,但它就在那里)
问题是,我需要计算 0 到 6 分(批评者)、7 到 8 分(被动者)以及 9 到 10 分(推荐者)之间的分数。所以它变成了这样:
计算 nps_score = (qty_promoters/qty_answers) - (qty_detractors /qty_answers)
我想过计算分数来获得每个部分的答案总数,但我不知道如何根据我的需要传播数据。
select business, office, count(score) as total from dbo.poll_results group by business, office
我考虑制作一个临时表,我可以在其中存储每个答案的 id 并将结果分为 3 个类别。
select id, score, "type" = case when score <= 6 then 'detractor' when score > 6 and score < 9 then 'passive' when score >= 9 then 'promoter' end into #tmp_NPS_scores from dbo.poll_results
然后加入两者,但我对结果如何感到非常困惑,到目前为止,我一直在尝试构建查询。
我一直在调查PIVOT(),但我相信我仍然不太明白,尝试使用它,但我只得到错误作为回报。我应该追求这个作为解决方案吗?
PIVOT()
我希望我能让这个问题尽可能容易理解,我正在处理十多个专栏,我相信这足以让任何人理解。
先感谢您。
哦,以防万一有人想知道,我知道这可以用 BI 工具完成,事实上我需要在 Tableau 中用它制作一个仪表板,但我的任务是通过制作 NPS 来减轻 Tableau 的一些负担表内计算。
with breakout as ( select service, office, count(case when score between 0 and 6 then 1 end) as qty_detractors, count(case when score between 7 and 8 then 1 end) as qty_passives, count(case when score between 9 and 10 then 1 end) as qty_promoters, count(*) as qty_answers from dbo.poll_results group by service, office ) select *, (qty_promoters - qty_detractors) / qty_answers as NPS_score from breakout
这将比执行单独的查询并通过连接将它们全部组合然后必须处理有零的空值更有效......