繁体   English   中英

T-SQL 如何选择一列值的计数,而另一列的值相同

[英]T-SQL How to select count of one column's values where another column's values are the same

如何选择零件相同的标签数量?

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 中列出了类似的问题,就像这个,但不知道如何将答案应用于这种情况。

你似乎只想要group by

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

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

select part, count(distinct label)
. . .

简单分组

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

您对预期 o/p 的处理是错误的且非常复杂。

您想要的 o/p 与组的子分区无关,就像您通过 partition by 等所做的那样,而是一个简单的group by就像上面的答案一样。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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