计数> 1表示具有多列的不同行

时间:2018-01-02 16:15:18

标签: sql-server

我的数据就像

HRS - SVDATE

1 - 1/1/2017

1 - 1/1/2017

1 - 2/1/2017

2 - 1/1/2017

2 - 1/1/2017

2 - 1/1/2017

3 - 3/1/2017

4 - 1/1/2017

4 - 2/1/2017

4 - 3/1/2017

原谅我在列之间使用了aiphen( - )

在这里,我需要获得HRS和SVDATE的不同记录,其中包括> 2 比如下面只有我想要的行

HRS - SVDATE

1 - 1/1/2017

1 - 2/1/2017

4 - 1/1/2017

4 - 2/1/2017

4 - 3/1/2017

我尝试使用HRS分组,SVDATE HAVING COUNT(小时)> 1

我得到HRS = 1计数= 3但我需要HRS = 1计数= 2(这里只有两个不符合SVDATE的那些)

请帮助如何为此编写查询

2 个答案:

答案 0 :(得分:1)

您的COUNT(hrs)只计算hrs为非NULL的记录数。

您需要COUNT(DISTINCT hrs)代替:

SELECT
 svdate,
 COUNT(DISTINCT hrs) AS NrOfDistinctHours,
 COUNT(*)            AS NrOfRows
FROM ...
GROUP BY svdate
HAVING COUNT(DISTINCT hrs) > 1

答案 1 :(得分:0)

如果我正确理解你的问题,它会给你正在寻找的输出

    SELECT DISTINCT t1.svdate,t1.hrs from table t1 
          JOIN (SELECT hrs from
                 (SELECT DISTINCT svdate,hrs FROM table)
                GROUP BY hrs
                HAVING COUNT(hrs) > 1) t2 
           ON t1.hrs=t2.hrs