计算行数作为查询中的列

时间:2015-06-25 19:52:27

标签: sql sql-server tsql

对标题感到抱歉,很难总结我要求的内容。

鉴于此:

SELECT [FirstName], [LastName], '-', [Thing] FROM.....

John Smith - Plow
James Jones - Plow
James Jones - Shovel
James Jones - Axe
Sarah Lee - Hammer
Sarah Lee - Pliers

我需要得到这个:

John Smith - Plow - 1
James Jones - Plow - 3
James Jones - Shovel - 3
James Jones - Axe - 3
Sarah Lee - Hammer - 2
Sarah Lee - Pliers - 2

我需要列出同一个人在行中出现的总次数。

这听起来像一个枢轴解决方案,但枢轴使我的大脑受伤。还有另外一种方法吗?如果没有,任何人都可以解释这个角度,如果这是它必须要来的吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

SELECT  *,
        COUNT(*) OVER (PARTITION BY FirstName, LastName) cnt
FROM    mytable

答案 1 :(得分:0)

这可能不是编写它的最有效方法,但可以完成工作。

select
firstname
,Surname
,count(firstname + Surname) over (partition by firstname + surname) as NameOccurences
from table

答案 2 :(得分:0)

我实际上找到了自己的方法。我喜欢“OVER / Partition by”解决方案。更短,但不是我明白他们在做什么。

这是我最终提出的:

with cte as (
    select last_name, first_name, count(1) as theCount
    from MetalThings
    group by last_name, first_name
)
select  m.*,
        cte.theCount
from    MetalThings m
    JOIN cte on (m.last_name = cte.last_name and m.first_name = cte.first_name)