我敢肯定有人對此有更好的想法,所以在這裏 - 我有一堆表格,其中有一堆表示其他表中的行的id(@tbLink)。我想在這裏表達COALESCE不與加入
declare @tbLink table (linkid int, identitytypeid int,
itemid int, categoryid int,parentid int)
declare @tbCat table (categoryid int, name varchar(20))
declare @tbId table (typeid int, typename varchar(20))
declare @tbDomain table (domainid int, domainname varchar(20))
--
declare @tbModule table (moduleid int, modulename varchar(20))
declare @tbProgram table (programid int, programname varchar(20))
INSERT INTO @tbLink VALUES (1, 1, 1, 1, 1)
INSERT INTO @tbLink VALUES (2, 1, 1, 2, 1)
INSERT INTO @tbCat VALUES (1, 'Program')
INSERT INTO @tbCat VALUES (2, 'Module')
INSERT INTO @tbId VALUES (1, 'Domain')
INSERT INTO @tbId VALUES (2, 'Group')
INSERT INTO @tbDomain VALUES (1, 'DEV')
INSERT INTO @tbModule VALUES (1, 'Module1')
INSERT INTO @tbProgram VALUES (2, 'ProgramA')
select t.*, i.typename, c.name, d.domainname, COALESCE(m.modulename, p.programname)
as objectname from @tbLink t
inner join
@tbId i on t.identitytypeid = i.typeid
inner join
@tbCat c on t.categoryid = c.categoryid
inner join
@tbDomain d on t.parentid = d.domainid
left join
@tbModule m on m.moduleid = t.itemid
left join
@tbProgram p on p.programid = t.itemid
我的結果是:
1 1 1 1 1 Domain Program DEV Module1
2 1 1 2 1 Domain Module DEV Module1
但我期待第1行是「ProgramA」而不是「模塊1」 - 我失去了一些東西在這裏?這是否也正確使用了COALESCE?
乾杯
邁克
但是,row1並沒有將其「itemId」鏈接到@tbModule中的值1,即「Module1」。從我看到的,我認爲一切都很好,正確...「ProgramA」將是「itemId = 2」 - 沒有? – 2011-01-12 08:09:33