如何为每一行添加相同的值的列?

3
我被要求对我们的数据库进行搜索,并解释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是一个列。我该如何让它知道我只想传递一个固定值?
一旦我做到这一点,他们希望我将这些值作为总数的百分比显示。感谢任何帮助。
4个回答

5

这应该会起作用。尝试使用单引号。

SQL使用单引号表示字符串文本。似乎它应该能够解释双引号,但就是这样。


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

1
我也建议这样做:为什么要查询5次? - gbn
1
这个更好,因为它允许您将整个内容作为一个查询运行。 - Michael Brown
除了上面展示的知识外,5个查询似乎是我最好的想法! - Scott
这段代码能在通用的“查询执行器”中工作吗?我正在使用Visual Studio,但纯粹的复制和粘贴并没有起作用。也许我需要进行一些研究,因为目前可能有些超出我的能力范围。 - Scott
你使用的是哪个版本?它可以在SQL 2005+中运行。如果你在2000年,我可以改变它以使其工作。 - Derek Kromm
显示剩余2条评论

1

更改您的引号。例如:

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)

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

我得试一下。这种写SQL的方式对我来说完全是新的! - Scott
@Scott:现在我能看到,似乎Jonathan Wood已经找到了问题的实际原因。因此,我希望你意识到上面的解决方案与你最初的查询返回结果非常不同。我现在认为,那是我的错误猜测。当然,如果你认为这对你掌握语言有帮助,我也可以将答案留在这里。 - Andriy M
给我一秒钟,我会尝试并查看它返回了什么。非常感谢您抽出时间回复! - Scott
这太棒了!它将所有内容都显示为一行,而不是我最初设想的5行。执行后,我的编辑器会重写代码,以便它不再具有"[...] = Count()"。 - Scott
明白了。我想我会继续使用 "AS",因为 SQL SERVER 重写它来使用 "AS",而且我也习惯了。我真的不熟悉 "THEN 1 END",这是你经常使用的吗? - Scott
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接