我被要求对我们的数据库进行搜索,并解释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)
虽然我希望这会起作用,但它希望0到19是一个专栏。我怎么能让它知道我只是试图将它传递给固定值?
一旦我开始工作,他们就会喜欢我的价值占总数的百分比。任何帮助表示赞赏。
答案 0 :(得分:5)
这应该有效。试试单引号。
SQL使用单引号来表示字符串文本。似乎它可以解释双引号,但你有它。
答案 1 :(得分:5)
以下应该给你一个很好的起点我想:
;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
答案 2 :(得分:1)
更改您的语音标记。 E.g:
SELECT '0 to 19' AS [Age Group]
完整:
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)
答案 3 :(得分:1)
不确定我是否正确,但如果你想在列中得到结果,你可以这样做:
SELECT
[0 to 19] = COUNT(CASE WHEN DATEDIFF(year, DOB, GETDATE()) BETWEEN 0 AND 19 THEN 1 END),
[20 to 39] = COUNT(CASE WHEN DATEDIFF(year, DOB, GETDATE()) BETWEEN 20 AND 39 THEN 1 END),
…
FROM dbo.Clients