如何使用一个表中的列到另一个在SQL Server 2008 R2

问题描述:

我有两个表如何使用一个表中的列到另一个在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行,因此无法正确映射代码的输出。

如果我理解正确的问题,问题是为何代码表格只包含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

这是否适合你?

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