Sco*_*ott 3 sql sql-server union group-by
我被要求对我们的数据库进行搜索,并解释5个不同年龄段的客户数量.我知道我可以运行相同的查询五次.但是,我希望能够创建一个可以完成整个工作的查询.
据我所知,我需要做5个查询,然后使用"UNION"连接不同的查询.
问题是,对于每个查询,我想添加一个显示"年龄范围"的列,然后放置一些文本来命名该组.
我想出的SQL是:
SELECT COUNT(CLIENT_ID) AS Client_Count, "0 to 19" AS [Age Group]
FROM dbo.CLIENTS
WHERE (DATEDIFF(year, DOB, GETDATE()) BETWEEN 0 AND 19)
Run Code Online (Sandbox Code Playgroud)
虽然我希望这会起作用,但它希望0到19是一个专栏.我怎么能让它知道我只是试图将它传递给固定值?
一旦我开始工作,他们就会喜欢我的价值占总数的百分比.任何帮助表示赞赏.
以下应该给你一个很好的起点我认为:
;with AgeRanges(Low, High) as (
select 0, 19
union select 20, 39
union select 40, 59
union select 60, 79
union select 80, 1000
)
select
count(CLIENT_ID) as Client_Count,
convert(varchar, Low) + ' to ' + convert(varchar, High) as [Age Group]
from
dbo.CLIENTS
inner join AgeRanges
on DATEDIFF(year, DOB, getdate()) BETWEEN Low and High
Run Code Online (Sandbox Code Playgroud)