根据MSSQL中的列值从任一表中检索数据

时间:2015-01-02 11:08:35

标签: sql sql-server

Create table test
(
id int,
Name varchar(50),
ObjType varchar(50)
Typeval varchar(50)
)

我还有另外两个名为tbl1和tbl2

的表

根据表“test”中ObjType的值,我必须从tbl1或tbl2中检索列。 注意:我要检索的列名在tbl1和tbl2中不相同。

类似的东西:

SELECT Name, Objtype,id, typeval, 
 Desc = CASE WHEN objtype='abc' THEN 
                 SELECT col1 from tbl1 WHERE cond=id (col from table test) 
             WHEN objtype = 'xyz' THEN 
                 SELECT cola from tbl2 WHERE crit = id (col from table test)

任何人都可以指导我

2 个答案:

答案 0 :(得分:0)

尝试使用union语句。

SELECT t.objtype as objtype, t1.col1 as fieldvalue 
FROM test t LEFT JOIN tbl1 t1 ON t.cond= t1.id
    WHERE t.objtype = 'abc'
UNION ALL
SELECT t.objtype as objtype, t2.cola as fieldvalue 
FROM test t LEFT JOIN tbl2 t2 ON t.crit= t2.id
    WHERE t.objtype = 'xyz'

它需要做一些改变,但它可能会对你有帮助。

答案 1 :(得分:0)

我通过加入表t1和t2

来创建CTE来解决问题

WITH CTE AS (从tbl1中选择col1,objtype 联盟   SELECT col1,来自tbl2的objtype)

SELECT Name,Objtype,id,typeval,(SELECT Col1 FROM CTE C WHERE C.ObjType = t.ObjType)as DEscription 来自TEst t

感谢所有发表了宝贵意见的人