【问题标题】:Retrieve data from either of table based on column value in MSSQL根据 MSSQL 中的列值从任一表中检索数据
【发布时间】:2015-02-28 17:25:49
【问题描述】:
Create table test
(
id int,
Name varchar(50),
ObjType varchar(50)
Typeval varchar(50)
)

我还有另外 2 个名为 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)

任何人都可以指导我

【问题讨论】:

  • test、tb1 和 tbl2 之间有什么关系吗?如果是这样,则使用基于 objtype 的 CASE 加入并从 tbl1 或 tbl2 中提取
  • tbl1 和 tbl2 不相关。基本上测试有主数据ID的列,我需要从主表中获取描述。我们有不止一个主表来存储数据
  • @Saravanan 如果表不相关,那么获取逻辑是什么?如果没有关系,它将无法工作,除非 tbl1 和 tbl2 各只有 1 行并且您总是获取那一行...但这是另一个问题。
  • 我已经在我的查询中提到了这个关系。 id 列是链接

标签: sql sql-server


【解决方案1】:

我通过连接表 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

感谢所有发布有价值的 cmets 的人

【讨论】:

    【解决方案2】:

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

    它需要一些改变才能工作,但它可能会对你有所帮助。

    【讨论】:

    • 我修改了这个查询,因为我有两列有相同的需求。无论如何谢谢
    猜你喜欢
    • 2022-10-07
    • 2021-12-31
    • 2017-05-07
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2016-06-28
    相关资源
    最近更新 更多