这几乎有用......
SELECT
dbo.ObjectThumb.dotID, dbo.ObjectThumb.doID,
dbo.ObjectThumb.dotWidth, dbo.ObjectThumb.dotHeight,
dbo.Object.doWidth, dbo.Object.doHeight,
(CAST(dotWidth AS FLOAT) / CAST(doWidth AS FLOAT)) AS 'widthRatio',
(CAST(dotHeight AS FLOAT) / CAST(doHeight AS FLOAT)) AS 'heightRatio',
(SELECT Max(v) FROM (VALUES (widthRatio), (heightRatio)) AS value(v)) AS MaxRatio
FROM
dbo.ObjectThumb
INNER JOIN
dbo.Object ON Object.doID = ObjectThumb.doID
服务器返回错误:
列名称widthRatio无效 列名称heightRatio无效
这些列在外部选择中计算。如果我引用两个非计算列(例如doID& dotID),则运行我的查询。
我想我的内部选择的语法搞砸了。这将在SQL Server 2008 R2(v10.50.2550)上运行。
我离该内部列的正确语法不远。例如,如果我运行
SELECT *
FROM (VALUES (1,2), (5,3), (1,4)) AS tableOfValues (columnName1, ColumnName2)
我得到了
1 2
5 3
1 4
我很感激帮助使用语法来引用外部select中的计算列。如果你能告诉我正确的英语来表示内部选择,外部选择和计算列,那将是一个奖励!
答案 0 :(得分:0)
要理解的重要一点是,你的逻辑不会起作用。您无法在主查询中选择一个值,在这种情况下,来自子选择或内联查询的widthRatio
和heightRatio
,因为它超出了该查询的范围。知道你想要做的是创建一个你将加入主查询的内联查询。
您的内联查询应该看起来像这样
Select ObjectThumb.doID As 'LinkID',
(CAST(dotWidth AS FLOAT) / CAST(doWidth AS FLOAT)) AS 'Ratio'
From ObjectThumb
INNER JOIN Object ON Object.doID = ObjectThumb.doID
Union
Select ObjectThumb.doID,
(CAST(dotHeight AS FLOAT) / CAST(doHeight AS FLOAT))
From ObjectThumb
INNER JOIN Object ON Object.doID = ObjectThumb.doID
然后,您可以像这样加入您的内联查询
SELECT ObjectThumb.dotID,
ObjectThumb.doID,
ObjectThumb.dotWidth,
ObjectThumb.dotHeight,
Object.doWidth,
Object.doHeight,
(CAST(dotWidth AS FLOAT) / CAST(doWidth AS FLOAT)) AS 'widthRatio',
(CAST(dotHeight AS FLOAT) / CAST(doHeight AS FLOAT)) AS 'heightRatio',
Max(AllRatioTable.Ratio) As MaxRatio
From ObjectThumb
INNER JOIN Object ON Object.doID = ObjectThumb.doID
Inner Join (Select ObjectThumb.doID As 'LinkID',
(CAST(dotWidth AS FLOAT) / CAST(doWidth AS FLOAT)) AS 'Ratio'
From ObjectThumb
INNER JOIN Object ON Object.doID = ObjectThumb.doID
Union
Select ObjectThumb.doID,
(CAST(dotHeight AS FLOAT) / CAST(doHeight AS FLOAT))
From ObjectThumb
INNER JOIN Object ON Object.doID = ObjectThumb.doID
) As AllRatioTable
On ObjectThumb.doID = AllRatioTable.LinkID
Group by ObjectThumb.dotID,
ObjectThumb.doID,
ObjectThumb.dotWidth,
ObjectThumb.dotHeight,
Object.doWidth,
Object.doHeight
关于如何调用您的子选择的主题,请参见此处: