【发布时间】:2010-10-14 21:31:32
【问题描述】:
大家好, 我一直在为一个 select 语句苦苦挣扎,我希望能得到一些帮助。我目前在临时表中有一个 IP 列表,我想计算这个 IP 充当服务器的次数以及充当客户端的次数。无论我如何操作这个 select 语句,我总是得到同样的错误,告诉我 ServerCount 是一个无效的列,无论我用什么替换空值。这是选择语句:
select IPS, sum (ClientCount) as ClientCount, sum(ServerCount) as ServerCount
from (
select IP as IPS, Count(*) as ClientCount, null
from table1 join temp_table
on table1.client_ip = temp_table.IP
group by IP
union all
select null,IP as IPS, Count(*) as ServerCount
from table1 join temp_table
on table.server_ip = temp_table.IP
group by IP
)t
group by IPS, ClientCount, ServerCount
前半部分和后半部分在没有联合的情况下独立工作。关于是什么导致此错误的任何想法?此外,如果我使用 Nulls,我也会收到第二个错误。这是带有空值的完整错误:
消息 8155,第 16 级,状态 2,第 1 行 没有为“t”的第 3 列指定任何列。 消息 207,第 16 层,状态 1,第 13 行 列名“ServerCount”无效。 消息 207,第 16 层,状态 1,第 1 行 列名“ServerCount”无效。
谢谢。
【问题讨论】:
-
我会指出,当您在联合中使用 NUll 在第一个选择中创建列时,它将默认为整数数据类型。这很好,但如果它是你想要的 varchar 或 date 或 decimal 字段,你应该使用类似 CAST(null as varchar(10)) 的东西。
-
将您的 SQL 与您询问 this question 时给出的答案进行比较,您会发现 IP 应该是两个 SELECT 语句中的第一列。
标签: sql sql-server database sql-server-2005