为什么此代码在SQL Server 2005中不起作用?
select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid)
from prices c
where cityid=1
感谢。
答案 0 :(得分:1)
真是个问题!因为您使用子查询的位置是别名位置。 Alias是您为长名称提供的,可以在查询的其他部分轻松使用它们。我想你的想法是这样的代码:
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
干杯
答案 1 :(得分:0)
<强> EDITED 强>
select c.price AS [Tokyo] from prices c where c.cityid=1
不,这是不可能的,也不可能从ISO ISO标准组获得任何爱。您正在混合使用RDBMS和前端语义的目的。
想象一下,如果您有 2行数据,一个用于[东京],一个用于[京都],会发生什么。你会把这个专栏命名为什么?更好的选择是生成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表达式中是不允许的。
除非在Cities表中不存在prices.cityid(在这种情况下你的查询是好的),否则最好重写
select c.price, ci.CityName
from prices c
join Cities ci on ci.cityid= c.cityid
where cityid=1
答案 2 :(得分:0)
因为在SQL的任何规范或标准中都没有它说它应该工作。来自任何rdbms的SQL都是关于数据的,而不是它的呈现方式。