T-SQL计数多列更改

时间:2014-10-27 10:06:29

标签: sql-server tsql count group-by

我有这样的数据:

a,x,1
a,x,2
a,y,5
a,z,5
a,t,5
a,s,6
b,x1,11
b,x1,21
b,y1,51
b,z1,51
b,t1,51

我想计算值的变化但是如果第二个字段和第三个字段值没有改变;这不是一个改变。第2和第3字段值都必须更改。

在我上面的例子中;第1行到第2行不是变化但是第2行到第3行是变化的,因为x和2值都被改变了。同样,第3行到第4行是一个变化。

我希望查询结果为

a,3
b,2

谢谢。

1 个答案:

答案 0 :(得分:0)

根据你的问题,a和b的计数实际上是1.只有一次Becoz两行都有变化。

CREATE TABLE #t
  (
     col1 VARCHAR(10),
     col2 VARCHAR(10),
     col3 INT
  )

INSERT INTO #t
VALUES      ('a','x',1),
            ('a','x',2),
            ('a','y',5),
            ('a','z',5),
            ('b','x1',11),
            ('b','x1',21),
            ('b','y1',51),
            ('b','z1',51),
            ('b','t1',51);

WITH cte
     AS (SELECT Dense_rank()
                  OVER(
                    partition BY col1
                    ORDER BY col2) col1_rn,
                Dense_rank()
                  OVER(
                    partition BY col1
                    ORDER BY col3) col2_rn,
                *
         FROM   #t)
SELECT a.col1,
       Count(1) AS [count]
FROM   cte a
       LEFT JOIN cte b
              ON a.col1 = b.col1
                 AND a.col1_rn = b.col1_rn + 1
                 AND a.col2_rn = b.col2_rn + 1
WHERE  b.col1_rn IS NOT NULL
GROUP  BY a.col1