是否可以根据列的值从2个不同的表中提取值?例如,我有一个带有布尔列的表,该列返回0或1,具体取决于最终用户在程序中选择的内容。 0表示我应该拉入默认值。 1表示使用用户的数据。
如果我的表Table1
看起来像这样:
Case ID Boolean
====================
1 0
2 1
3 1
4 0
5 0
然后我需要从表Default
中提取案例ID 1,4和5的相应数据,并从表UserDef
中提取案例ID 3和4的相应数据。然后我将不得不采用这些值,组合它们,并按Case ID重新排序,以便我可以保留结果表中的顺序。
我对SQL很缺乏经验,但我正在努力学习。非常感谢任何帮助或建议。提前感谢您的帮助。
答案 0 :(得分: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
您加入这两个表,然后使用CASE
中的SELECT
选择显示数据的那个。
选项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和您的表。
答案 1 :(得分: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