繁体   English   中英

SQL 服务器:计算相邻列中的实例/唯一值

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM