可以說我在某個表上有一個巨大的選擇。列的一個值是使用複雜的logc計算的,其值爲列A。現在,對於另一列,我需要ColumnA的值,併爲其添加一些其他靜態值。將列的值用於另一列(SQL Server)?
樣品SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
的[ColumnA] + 10是什麼即時尋找。複雜的東西是一個巨大的情況/時塊。
想法?
可以說我在某個表上有一個巨大的選擇。列的一個值是使用複雜的logc計算的,其值爲列A。現在,對於另一列,我需要ColumnA的值,併爲其添加一些其他靜態值。將列的值用於另一列(SQL Server)?
樣品SQL:
select table.id, table.number, complex stuff [ColumnA], [ColumnA] + 10 .. from table ...
的[ColumnA] + 10是什麼即時尋找。複雜的東西是一個巨大的情況/時塊。
想法?
如果要引用這就是SELECT
子句中計算的值,則需要將現有的查詢移動到子SELECT:
SELECT
/* Other columns */,
ColumnA,
ColumnA + 10 as ColumnB
FROM
(select table.id, table.number, complex stuff [ColumnA].. from table ...
) t
你必須爲該表引入別名(在上面的t
中,在括號後面),即使您不打算使用它。
(等效 - 假設你使用SQL Server 2005或更高版本 - 您可以將現有的查詢移動到CTE):
;WITH PartialResults as (
select table.id, table.number, complex stuff [ColumnA].. from table ...
)
SELECT /* other columns */, ColumnA, ColumnA+10 as ColumnB from PartialResults
熱膨脹係數傾向於尋找更清潔,如果你已經有了一個局部多層次計算正在完成,也就是說如果你現在有一個依賴於ColumnB的計算來包含在你的查詢中。
您可以通過子查詢和列別名解決此問題。
下面是一個例子:
SELECT MaxId + 10
FROM (SELECT Max(t.Id) As MaxId
FROM SomeTable t) As SomeTableMaxId
,你可以:
+ 10
在客戶端代碼complex stuff
。它將被優化爲一次通話。complex stuff
其他列的邏輯。它應該被優化成1個呼叫。
+1我喜歡那第二個想法 – 2011-03-03 13:14:32