从先前的select子句中选择结果,从不同的记录返回结果

时间:2013-09-20 15:26:25

标签: sql sql-server select join

以下是我尝试将修订版值排成一行的基础。我没有建造桌子,所以请耐心等待,因为显然可以对结构进行一些改进

我已尝试简化查询以使其更易于阅读,可能存在拼写错误或语法问题。


  

表1

     

KEY1,TagName,ParentTag

     

1,TAG1,1

     

2,TAG2,NULL

     

表2

     

KEY2,修订

     

1,A


没有中间' CASE',我得到:

KEY1,TagName,Revision

1,Tag1,A

2,Tag2,NULL

我想:

KEY1,TagName,Revision

1,Tag1,A

2,Tag2,A

SELECT
KEY1, --Table1
TagName, --Table1

    Case When Revision is null THEN (
        SELECT Revision 
        from TABLE2
        Left  join TABLE1
        ON KEY1 = KEY2
        where TagName like ParentTag)

    ELSE ParentTag
    END as 'REV'

FROM  TABLE1
left join Table2
ON KEY2 = KEY1

我尝试过各种各样的东西,这个我似乎很难找到!

提前致谢!!

1 个答案:

答案 0 :(得分:0)

使用CTS更容易,在这种情况下,Table1仅用作创建主表(Table2)和修订表(CTS)之间链接的视图

它可以在不使用;With cts_Revision as ( Select key1, TagName, ParentTag, Revision From Table1 as a left join Table2 as b on a.key1 = b.key2 ) select a.Key1, a.TagName, coalesce(a.revision, parent.revision) as rev FROM cts_revision as a left join cts_revision as parent on parent.key1 = a.ParentTag 的情况下编写,但它的可读性要差得多。

{{1}}

工作示例:http://sqlfiddle.com/#!3/67019/1