2016-11-10 61 views
0

我有一个看起来像这样的表...SELECT查询内侧连接字段,以获取文本值,而不是ID的

Tbl1 
User   OriginalValue NewValue   FieldName 
MikeS   11    12     Dept 
BobL   140    141     Position 
JohnS   11 South St  13 South St   Address 
JenB   9    12     AmountPaid 
BillyS   133    132     Seller 

下面是桌子的样子。如果用户编辑了记录,我保存了原始值和新值。现在这就是我想要做的。我需要能够显示文字而不是ID(数字)。随着外(在这个例子中)AmountPaid和地址 - 所有值都在tblDefinition看起来像这样.....

tblDefinition 
ID    Name    Field 
9    SomeValue  SomeX 
10    SomeValue  SomeX 
11    Accounting  Dept 
12    Finance   Dept 
132    Microsoft  Seller 
133    Apple   Seller 
140    Manager   Position 
141    Entry   Position 

,所以我想包括一组数据来说明什么tblDefinition样子。我试图以某种方式能够使用来自tbl1的字段和ID,并与tblDefinition一起获取文本值。我需要使用FieldName,因为可能出现在原始值和新值中的某些值(例如Fieldname = AmountPaid)在tblDefinition中具有相应的值,但实际上我需要显示值 - 在本例中为9和12 。

Select OriginalValue, Newvalue, Field 
from tblDefinitions 
LEFT JOIN tblDefinitions on (tbl2.OriginalValue = tblDefinitions.ID and tbl2.NewValue=tblDefinitions.ID) 

这是我一直在努力,但是这是不会去任何地方 - 我真的有一个很难搞清楚,如果我能在一个查询做这样的事情,或者如果我需要做多在tblDefinitions中具有相应文本值的每个字段的联合或编辑。也许像....

Select t2.Name as OriginalValue from 
tbl1 t1 
inner join tblDefinitions t2 on t2.ID = t1.originalvalue 
where field in ('Dept', 'Position', 'Seller') 

也许只要我只有指定领域去寻找,也不会影响其他值,如量TBL 1

+0

它不可行吗? – BobSki

回答

0

支付如果我理解正确,你应该只加入定义表两次,一次为原始名称,一次为新名称。

SELECT tbl2.OriginalValue 
    ,tdo.name as OriginalName 
    ,tbl2.Newvalue 
    ,tdn.name as NewName 
    ,tbl2.user 
FROM tblBHH_HXfieldChanges tbl2 
LEFT JOIN tblDefinitions tdo 
     on tbl2.OriginalValue = tdo.ID 
left join tblDefinitions tdn 
     on tbl2.NewValue = tdn.ID 
+0

我想我需要使用FieldNames?你不觉得,对于AmountPaid--这些值不应该来自tblDefinitions,而是它应该保持原样(9),但如果我对tblDefinitions运行它,它会拉出一个值。这是我的问题 – BobSki