-1

このコードが SQL Server 2005 で機能しないのはなぜですか?

select c.price AS (select CityName from Cities ci where ci.cityid= c.cityid)
from prices c
where cityid=1

ありがとう。

4

3 に答える 3

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

乾杯

于 2012-10-08T22:12:30.330 に答える
0

編集済み

select c.price AS [Tokyo] from prices c where c.cityid=1

いいえ、それは不可能であり、SQL の 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 が返され、そのクエリの 2 番目の列は "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
于 2012-10-08T22:10:12.837 に答える
0

SQLの仕様や標準のどこにも、それが機能するはずだとは書かれていないからです。どの rdbms からの SQL も、データがどのように表示されるかではなく、データに関するものです。

于 2012-10-08T22:13:10.467 に答える