0

是否可以根据列的值从 2 个不同的表中提取值?例如,我有一个带有布尔列的表,它根据最终用户在我们的程序中选择的内容返回 0 或 1。0 意味着我应该引入默认值。1 表示使用用户的数据。

如果我的桌子Table1看起来像这样:

Case ID      Boolean
====================
    1              0
    2              1
    3              1
    4              0
    5              0

然后我需要从表中提取案例 ID 1、4 和 5 的相应数据以及从表中提取Default案例 ID 3 和 4 的相应数据UserDef。然后我必须获取这些值,将它们组合起来,然后按案例 ID 重新排序,这样我就可以在结果表中保留顺序。

我对 SQL 相当缺乏经验,但我正在努力学习。非常感谢任何帮助或建议。预先感谢您的帮助。

4

2 回答 2

1

像这样的东西:

SELECT 
  t1.CaseID
 ,CASE WHEN t1.Boolean = 1 THEN dt.Col1 ELSE ut.Col1 END AS Col1
 ,CASE WHEN t1.Boolean = 1 THEN dt.Col2 ELSE ut.Col2 END AS Col2 
FROM Table1 t1
LEFT JOIN DefaultTable dt ON dt.CaseID = t1.CaseID
LEFT JOIN UserDefTable ut ON ut.CaseID = t1.CaseID
ORDER BY t1.CaseID

您加入两个表,然后使用CASEinSELECT来选择要显示数据的表。

选项 B:

WITH CTE_Combo AS
(
   SELECT 0 as Boolean, * FROM Default     --replace * with needed columns
   UNION ALL 
   SELECT 1 AS Boolean, * FROM UserDef     --replace * with needed columns
)
SELECT * FROM Table1 t
LEFT JOIN CTE_Combo c ON t.CaseID = c.CaseID AND t.Boolean = c.Boolean
ORDER BY t.CaseID

这可能更简单 - 使用 CTE 将两个表合并,添加人工列,然后使用 ID 和标志列连接 CTE 和您的表。

于 2013-07-19T16:03:45.717 回答
1
SELECT t1.CaseID, 
       ISNULL(td.data, tu.data) userData -- pick data from table_default
                                         -- if not null else from table_user
  FROM table1 t1
  LEFT JOIN table_default td ON t1.CaseID = td.CaseID -- left join with table_default
                            AND t1.Boolean = 0        -- when boolean = 0
  LEFT JOIN table_user tu ON t1.CaseID = tu.CaseID -- left join with table_user
                         AND t1.Boolean = 1        -- when boolean = 1
  ORDER BY t1.CaseID
于 2013-07-19T16:07:26.637 回答