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

Retrieve data from either of table based on column value in MSSQL

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

我还有另外 2 个 table 分别命名为 tbl1 和 tbl2

根据 table "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)

谁能指导我

尝试使用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'

它需要一些更改才能工作,但它可能对您有所帮助。

我通过加入 table t1 和 t2

创建 CTE 解决了这个问题
WITH CTE AS 
(
  SELECT col1, objtype 
  from tbl1

  UNION

  SELECT col1, objtype 
  from tbl2
)

SELECT 
  Name, Objtype, id, typeval, 
  (
    SELECT Col1 
    FROM CTE C 
    WHERE C.ObjType = t.ObjType
  ) as Description
FROM Test t

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