2017-08-01 152 views
2

我在兩個表如下:乘以最大行和追加列出

(SFR_MAIN)

SQ. FT. AREA  1   2 
400   86.6600 86.7300 
500   82.3300 82.4000 
600   78.9600 79.0200 
700   76.2100 76.2700 
800   73.9100 73.9700 
900   71.9400 71.9900 
1000   70.2200 70.2700 
1100   68.7000 68.7500 
1200   67.3400 67.3900 
1300   66.1200 66.1600 
1400   65.0000 65.0400 
1600   63.0400 63.0800 
1800   61.3600 61.3900 
2000   59.8900 59.9300 
2200   58.6000 58.6300 
2400   57.4400 57.4700 
2600   56.3900 56.4200 
2800   55.4400 55.4700 
3000   54.5700 54.6000 

而且

(多重)

SQ. FT. AREA MULTIPLIER 
3100   0.992 
3200   0.986 
3300   0.978 
3400   0.971 
3500   0.964 
3600   0.958 
3700   0.952 
3800   0.946 
4000   0.934 

的想法將會同時創建一個表。問題在於第二個乘數應該乘以最後一個(最大)的平方。

因此3100將是.992 * 54.571.992 * 54.62,是的那些是列的實際名稱。

因此所需的輸出將是:

SQ. FT. AREA 1   2 
400   86.6600 86.7300 
500   82.3300 82.4000 
600   78.9600 79.0200 
700   76.2100 76.2700 
800   73.9100 73.9700 
900   71.9400 71.9900 
1000   70.2200 70.2700 
1100   68.7000 68.7500 
1200   67.3400 67.3900 
1300   66.1200 66.1600 
1400   65.0000 65.0400 
1600   63.0400 63.0800 
1800   61.3600 61.3900 
2000   59.8900 59.9300 
2200   58.6000 58.6300 
2400   57.4400 57.4700 
2600   56.3900 56.4200 
2800   55.4400 55.4700 
3000   54.5700 54.6000 
3100   54.1334 54.1632 
3200   53.8060 53.8356 
3300   53.3695 53.3988 
3400   52.9875 53.0166 
3500   52.6055 52.6344 
3600   52.2781 52.3068 
3700   51.9506 51.9792 
3800   51.6232 51.6516 
4000   50.9684 50.9964 

我可以做的一列是這樣的:

select 
[SQ. FT. AREA], 
[1] 
from test.dbo.SFR_MAIN 

union all 

Select 
[SQ. FT. AREA], 
MULTIPLIER * (select 
m.[1] 
from test.dbo.SFR_MAIN m 
inner join 
    (
    select max([SQ. FT. AREA]) as mmm 
    from test.dbo.SFR_MAIN 
    ) tt on tt.mmm = m.[SQ. FT. AREA] 
) as [1] 
from test.dbo.mult 

而且如果我只用了兩列,我只想做兩次,但我有16列。有沒有辦法遍歷列來將它們並排放在一個表中?

我使用SQL Server 2012的

回答

2

Select * From SFR_MAIN 
Union All 
Select B.[SQ. FT. AREA] 
     ,[1] = A.[1]*B.MULTIPLIER 
     ,[2] = A.[2]*B.MULTIPLIER 
From (Select Top 1 with ties * from SFR_MAIN Order by [SQ. FT. AREA] Desc) A 
Join MULT B on B.[SQ. FT. AREA]>A.[SQ. FT. AREA] 

返回

enter image description here

+0

工程很棒。謝謝。現在是艱難的部分,決定給予15分。我需要考慮我將使用哪個。 –

+0

@ScottCraner SO的美妙之處在於你可以獲得選擇。你可以選擇最適合你的那個。 –

+0

任何一種方式都不錯。 – xQbert

1

迭代的數據庫通常是一個壞主意。數據庫在基於集合的方法上更好地工作。所以,如你所描述的那樣,然後使用第一組中具有最高平方英尺的記錄中的交叉連接,然後進行數學計算。

SELECT [SQ. Ft. Area], [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16] 
FROM sfr_Main 
UNION ALL 

SELECT A.[SQ. FT. Area] 
    , B.multiplier*[1] as 1 
    , B.multiplier*[2] as 2 
    , B.multiplier*[3] as 3 
    , B.multiplier*[4] as 4 
    , B.multiplier*[5] as 5 
    , B.multiplier*[6] as 6 
    , B.multiplier*[7] as 7 
    , B.multiplier*[8] as 8 
    , B.multiplier*[9] as 9 
    , B.multiplier*[10] as 10 
    , B.multiplier*[11] as 11 
    , B.multiplier*[12] as 12 
    , B.multiplier*[13] as 13 
    , B.multiplier*[14] as 14 
    , B.multiplier*[15] as 15 
    , B.multiplier*[16] as 16 

FROM MULT A 
CROSS JOIN (SELECT top 1 [SQ. Ft. Area], [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16] 
      FROM sfr_main 
      ORDER BY [sq.ft.area] desc) B 
+0

我不得不把'[]'周圍的列名'如[1]',並把一個別名交叉連接表:')dd'和一些其他項目來表示適當的分配給適當的表,但它確實有效。讓我試試其他答案。 –

+0

儘管你幫助別人,我很樂意幫助你:P – xQbert