このコードが 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
乾杯
編集済み
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
SQLの仕様や標準のどこにも、それが機能するはずだとは書かれていないからです。どの rdbms からの SQL も、データがどのように表示されるかではなく、データに関するものです。