[英]SQL Server: Counting the instance/unique value in an adjacent column
请原谅我,我正在努力争取正确的术语,以实现我想要实现的目标。
我有一个响应的查询结果,我试图只计算相邻列中的唯一值。 COUNT(...) 和 COUNT(DISTINCT...) 没有给我我需要的东西。
date total_responses responseType generationNumber
20-01-22 53 positive 125
20-01-22 7 negative 125
15-01-22 73 positive 70
15-01-22 112 negative 70
07-01-22 126 positive 15
07-01-22 121 negative 15
03-01-22 74 positive 1
03-01-22 2 negative 1
正如您所希望看到的,我的目标是计算 generationNumber 中的唯一值。
我的 SELECT 声明:
SELECT MIN(a.[date]) AS 'date', COUNT(a.employee) AS 'total_responses', a.responseType , b.GenerationNumber
我想要的结果:
date total_responses responseType generationNumber unique_count
20-01-22 53 positive 125 4
20-01-22 7 negative 125 4
15-01-22 73 positive 70 3
15-01-22 112 negative 70 3
07-01-22 126 positive 15 2
07-01-22 121 negative 15 2
03-01-22 74 positive 1 1
03-01-22 2 negative 1 1
编辑 - 添加我记得的更简单的解决方案,但保留另一个解决方案。
with origQuery as(
SELECT
MIN(a.[date]) AS 'date',
COUNT(a.employee) AS 'total_responses',
a.responseType ,
b.GenerationNumber
FROM YourTable
)
SELECT
*,
DENSE_RANK() OVER (ORDER BY generationNumber DESC) AS unique_count
FROM origQuery
这是应该为您做的解决方案。 基本上,您需要使用 CTE 来存储原始查询的结果,获取所有不同的 GenerationNumber 值。 一旦你得到了,你可以给他们行号并将它们加入到基于 GenerationNumber 的原始查询中
with origQuery as(
SELECT
MIN(a.[date]) AS 'date',
COUNT(a.employee) AS 'total_responses',
a.responseType ,
b.GenerationNumber
FROM YourTable
),
distinctGenerationNumber as
(
SELECT
DISTINCT generationNumber
FROM origQuery
),
RowNumbers as (
SELECT
generationNumber,
row_number() over(order by generationNumber DESC) as unique_count
FROM distinctGenerationNumber
)
SELECT
orig.*,
r.unique_count
FROM origQuery orig JOIN RowNumbers r on orig.generationNumber = r.generationNumber
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.