为什么此代码在 SQL Server 2005 中不起作用?
select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid)
from prices c
where cityid=1
谢谢。
为什么此代码在 SQL Server 2005 中不起作用?
select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid)
from prices c
where cityid=1
谢谢。
这是什么问题!因为您使用子查询的位置是别名位置。别名是您赋予长名称以便在查询的其他部分轻松使用它们的名称。我想你的想法是这样的代码:
Select c.price
, ci.CityName
From prices As c
Inner Join
Cities As ci
On ci.cityid = c.cityid
并且请以嵌套样式编写您的代码。它很容易阅读,当然也更容易理解。
更新:
如果您需要城市列表作为列名和它们下方的价格,则应使用"PIVOT"
运算符。像这样的代码:
Select PivotedResult.[1] As US
, PivotedResult.[2] As UK
, PivotedResult.[3] As IR
From prices As c
Pivot (
Sum(c.price)
For c.cityid In (
[1]
, [2]
, [3]
)
) As PivotedResult
干杯
因为在任何 SQL 规范或标准中都没有说它应该工作。来自任何 rdbms 的 SQL 是关于数据的,而不是它的呈现方式。
已编辑
select c.price AS [Tokyo] from prices c where c.cityid=1
不,这是不可能的,也不太可能得到 ISO SQL 标准组的任何喜爱。您正在混合 RDBMS 和前端语义的目的。
想象一下,如果您有2 行数据,1 行用于 [Tokyo],1 行用于 [Kyoto],会发生什么情况。你会给这个专栏起什么名字?更好的选择是生成 2 列,如下所示,让前端使用来自第 2 列的标签。
select c.price
,(select CityName from Cities ci where ci.cityid= c.cityid) AS CityName
from prices c
where cityid=1
当您希望将输出列命名为查询的调用者时,使用术语“列别名”。在这种情况下,将返回子查询中的 CityName,并且该查询中的第二列被命名为“CityName”。
假设cityid
是唯一的,则返回多个结果的子查询不会有任何问题——这在 SELECT 表达式中是不允许的。
除非 price.cityid 可能不存在于 Cities 表中(在这种情况下您的查询很好),否则最好重写
select c.price, ci.CityName
from prices c
join Cities ci on ci.cityid= c.cityid
where cityid=1