2012-03-20 62 views
0

我有兩個表如何使用一個表中的列到另一個在SQL Server 2008 R2

History with(BU,KPI_Name,YTD,Actual,Deviation) 
Codes with (KPI_Name, KPI_code) 

歷史表的KPI_Name列的內容恰好複製到碼錶的KPI_Name。這個KPI_Name值是一個很長的語句,爲此我開發了一個用於理解並複製到Codes表中的「Short Code」。

現在,歷史表我想用代碼表,而不是歷史表的KPI_name列的KPI_Code列。

所以輸出應該是:KPI_Table與(BU,KPI_Code,年初至今,實際的偏差)

希望我能夠讓你明白我要求的。

我嘗試了許多代碼,但問題是代碼表只包含30行,歷史表後執行包含90行,因此無法正確映射代碼的輸出。

回答

0

如果我理解正確的問題,問題是爲何代碼表格只包含30行,而歷史包含90.你應該只能夠看值代碼,看看哪些是失蹤。

使用SQL你可以:

select h.KPI_Name, c.KPI_Code 
from History h 
left outer join Codes c on c.KPI_Name = h.KPI_Name 

一旦你制定了什麼是錯的代碼轉換,你可以使用

alter table History add KPI_Code (data type) 

一個KPI_Code列添加到歷史然後從代碼的東西來填充它如:

update History 
set KPI_Code = c.KPI_Code 
from History 
inner join Codes c on c.KPI_Name = History.KPI_Name 

如果您不明白爲什麼KPI_Code代不工作ing,post that code

+0

事情是,歷史表是3個業務單位。而且所有的業務單元都包含相同的行(所有行的所有30行的名稱都相同),那麼我就編碼了一個小代碼。在代碼表中,它只包含每行的代碼。但是,如果執行後的歷史記錄表顯示了所有業務單位的結果(將業務單位視爲部門)。如果問題不明確,請告知我。 – Pankaj 2012-03-20 07:46:48

+0

你需要提供一些示例數據來解釋問題 - 輸入和要求的輸出 – kaj 2012-03-20 07:49:41

0

這是否適合你?

select H.BU, C.KPI_Code, H.YTD, H.Actual, H.Deviation 
from History H 
inner join Codes C 
on C.KPI_Name = H.KPI_Name 
+0

是的,我試過這個,但它給了我3倍的實際行。例如,對於30行,它會給我90行作爲輸出。內部連接可能會變成什麼? – Pankaj 2012-03-20 07:40:46

+0

我可以使用外鍵嗎? – Pankaj 2012-03-21 06:54:08

相關問題