Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自另一个查询的SQL server列别名_Sql_Tsql_Sql Server 2005_Sql Server 2005 Express - Fatal编程技术网

来自另一个查询的SQL server列别名

来自另一个查询的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和前端语义的用途 想象一下,如果你有两行数据,一行是[东京],另一行是

为什么此代码在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和前端语义的用途

想象一下,如果你有两行数据,一行是[东京],另一行是[京都],会发生什么。你会给这个专栏起什么名字?更好的选择是生成如下所示的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即可提取城市名称。谢谢。这次解释得很好。。。请看更新后的帖子。干杯