来自另一个查询的SQL server列别名
为什么此代码在SQLServer2005中不起作用来自另一个查询的SQL server列别名,sql,tsql,sql-server-2005,sql-server-2005-express,Sql,Tsql,Sql Server 2005,Sql Server 2005 Express,为什么此代码在SQLServer2005中不起作用 select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid) from prices c where cityid=1 谢谢。已编辑 从价格c中选择c.price作为[Tokyo],其中c.cityid=1 不,这是不可能的,也不可能得到ISO标准组对SQL的喜爱。您混合了RDBMS和前端语义的用途 想象一下,如果你有两行数据,一行是[东京],另一行是
select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid)
from prices c
where cityid=1
谢谢。已编辑
从价格c中选择c.price作为[Tokyo],其中c.cityid=1
不,这是不可能的,也不可能得到ISO标准组对SQL的喜爱。您混合了RDBMS和前端语义的用途
想象一下,如果你有两行数据,一行是[东京],另一行是[京都],会发生什么。你会给这个专栏起什么名字?更好的选择是生成如下所示的2列,并让前端使用第2列中的标签
或许 当您希望向查询的调用者命名输出列时,使用术语“列别名”。在本例中,返回子查询中的CityName,该查询中的第二列命名为“CityName” 假设
cityid
是唯一的,那么子查询返回多个结果不会有任何问题-这在SELECT表达式中是不允许的
除非prices.cityid可能不存在于Cities表中(在这种情况下,您的查询很好),否则最好重写它
select c.price, ci.CityName
from prices c
join Cities ci on ci.cityid= c.cityid
where cityid=1
真是个问题!因为使用子查询的位置是别名位置。别名是您为长名称指定的名称,以便在查询的其他部分轻松使用它们。我想你脑子里想的是这样的代码:
Select c.price
, ci.CityName
From prices As c
Inner Join
Cities As ci
On ci.cityid = c.cityid
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
也请用嵌套的方式编写代码。这本书很容易阅读,当然你自己也更容易理解
更新:
如果您需要城市列表作为列名称及其下方的价格,则应使用“PIVOT”
运算符。像这样的代码:
Select c.price
, ci.CityName
From prices As c
Inner Join
Cities As ci
On ci.cityid = c.cityid
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都是关于数据的,而不是数据的表示方式。您的意思是什么,所谓“不工作”?请从价格c中选择c.price作为[Tokyo],其中c.cityid=1起作用,但不是上面的代码。它起作用,因为它无效。对于格式问题,非常抱歉。我需要的是显示城市名称,价格如下所示。在最终查询中必须有多个城市(作为列名,价格低于每个城市的名称)。我需要稍后通过asp.net网页在查询字符串中更改城市ID。因此,基本上相同的代码只需通过查询字符串更改城市id即可提取城市名称。谢谢。这次解释得很好。。。请看更新后的帖子。干杯