根据字段长度分组

时间:2021-03-10 06:18:24

标签: sql sql-server tsql

我想根据年份对长度为 4、5、6 个字节的 ID 进行分组。

<头>
ID 姓名 位置 地理位置 new_loc 地址 1 地址 2 地址 3 地址 4
12345 2019 鲍勃 英国 UK-4 基础 dat1 dat11 dat13 dat123
19804 2004 山姆 美国 美国-1 高级 dat2 dat21 dat23 dat233
19 2000 列表 欧盟 欧盟 基础 dat3 dat31 dat33 dat333
190838 2004 哈罗德 美国 US-3 基础 dat4 dat41 dat53 dat533
11804 2019 豆豆 SK 英国-2 高级 NULL NULL NULL NULL

输出

<头>
ID 姓名 位置 新地点 num_of_ids_each_year
12345 2019 鲍勃 英国 基础 2
11804 2019 豆豆 SK 高级 2
19804 2004 山姆 美国 高级 2
190838 2004 哈罗德 美国 基础 2

我尝试了什么:

select ID, year, name, location, [new location], count(year)
from table1
group by ID, year, name, location, [new location], count(year);

有人可以就如何仅包含超过 4、5、6 个字节的 ID 提出建议

3 个答案:

答案 0 :(得分:2)

谢谢@Squirrel,我终于找到了方法。

select id, Year, name, location, [new location], 
    count(id) over (partition by year) as num_of_ids_each_year
from table1 where len(id) in (4,5,6);

答案 1 :(得分:0)

您可以将 COUNT()Partition by Year 结合使用以获得结果,而无需使用 GROUP BY

SELECT ID, [year], [name], [location], [new location]
    , COUNT(1) OVER (PARTITION BY year) AS num_of_ids_each_year
FROM table1
WHERE LEN(ID) IN (4,5,6)

答案 2 :(得分:0)

请尝试在have子句中使用聚合函数

例如

select  ID, 
        year, 
        name, 
        location, 
        new location, 
        len(year)
from table1
group by ID, year, name, location, new location
having Len(year) >= 4 
相关问题