T-SQL如何在另一列的值相同的情况下选择一个列的值的计数

时间:2019-03-21 18:06:47

标签: sql sql-server tsql

如何选择Part相同的Label的数量?

Part  |  Label
------+-------
  a   |    L1
  a   |    L2
  a   |    L3
  b   |    L1
  b   |    L2  

预期结果:

Part  |  LabelCount
------+------------
  a   |    3
  b   |    2

注意:所有数据类型都是字符串。我尝试分区以获取最大行数,但是ROW_NUMBER()上的MAX函数对我一直执行的方式没有响应,并且无论我是否使用MAX,它都一直返回所有行。

;WITH RowNumCTE AS 
(
    SELECT
        [PartName],
        ROW_NUMBER() OVER (PARTITION BY [Part] ORDER BY [Label] ASC) AS rn
    FROM 
        [PartTable]
)
SELECT DISTINCT   
    [Part],
    MAX([rn]) AS [LabelCount]
FROM
    RowNumCTE
GROUP BY
    [Part], [rn]

实际结果:

Part  |  LabelCount
------+------------
  a   |    1
  a   |    2
  a   |    3
  b   |    1
  b   |    2

我已经在StackOverflow中找到了类似问题的清单,例如this one,但看不到如何将答案应用于这种情况。

3 个答案:

答案 0 :(得分:2)

您似乎只想要group by

select part, count(*) as labelcount
from t
group by part;

如果零件上有重复的标签,则:

select part, count(distinct label)
. . .

答案 1 :(得分:0)

简单分组依据

select part,count(*) from t 
group by part

答案 2 :(得分:0)

您对预期目标的处理方法是错误的,而且非常复杂。

您所希望的o / p与通过分组等进行分组的子分区没有任何关系,但是如上述答案所述,它只是一个简单的group by

      select part,count(*) from t 
       group by part -- as only partwise 
       count is required