假设我有四张桌子 使用以下结构的主要,父级,子级,父级制作
如果ConfigTable列值为Parent或Child,则StageId将为ParentId或ChildId。
现在我必须使用所有其他表在主表上执行左外连接,并且需要像
这样的数据结果集
例如: -
然后结果应该像
到现在为止,我的查询是
select MT.ID, PT.code, CH.code from Maintable MT
left outer join Parent PT on MT.SatgeId = PT.ID and MT.ConfigTable = 'Parent'
left outer join child CH on MT.SatgeId = CH.ID and MT.ConfigTable = 'Child'
我正在获得像
这样的输出答案 0 :(得分:0)
您需要使用映射表以便按子选择父级。以下是如何执行此操作:
DECLARE @mt TABLE(ID INT, StageID INT, ConfigTable VARCHAR(10))
DECLARE @pt TABLE(ID INT, Code VARCHAR(10))
DECLARE @ct TABLE(ID INT, Code VARCHAR(10))
DECLARE @map TABLE(ID INT, ParentID INT, ChildID INT)
INSERT INTO @mt VALUES(1, 1, 'Parent'),(2, 1, 'Child')
INSERT INTO @pt VALUES(1, 'PT01')
INSERT INTO @ct VALUES(1, 'CH01')
INSERT INTO @map VALUES(1, 1, 1)
SELECT mt.ID,
ISNULL(pt.Code, ptp.Code) AS PCode,
ct.Code AS CCode
FROM @mt mt
LEFT JOIN @pt pt ON mt.ConfigTable = 'Parent' AND mt.StageID = pt.ID
LEFT JOIN @ct ct ON mt.ConfigTable = 'Child' AND mt.StageID = ct.ID
LEFT JOIN @map map ON ct.ID = map.ChildID
LEFT JOIN @pt ptp ON map.ParentID = ptp.ID
输出:
ID PCode CCode
1 PT01 NULL
2 PT01 CH01