【发布时间】:2021-01-10 02:39:00
【问题描述】:
假设有 2 个表 'Source' 和 'Name'。表的记录如下:
源表
名称表
我的 SQL 查询是:
select s.*
from source s
join name n on
s.Market = n.Market
and s.Owner = n.Owner
and s.Name = n.Name
and Source = case Source when 'State' then 'State' else 'Data' end
它返回 2 条记录,但我必须使用“状态”(如果存在)并忽略“数据”,如果“状态”不存在则使用“数据”。
请帮帮我。
提前致谢。
预期结果:
【问题讨论】:
-
在 ON 子句中使用 AND/OR 结构而不是 case 表达式通常会更好。
-
已更新。请检查。
-
是你预期的结果吗?还是您当前的错误结果?那个case表达式背后的逻辑是什么?它是加入条件的一部分吗? where 子句,如果是,它试图做什么?
-
我已经更新了我的预期结果。案例表达式的逻辑将类似于如果在表中存在“状态”,则只有该记录将返回并忽略具有“数据”的第二条记录,但如果“状态”不存在,则它将使用“数据”。是的,它是连接条件的一部分。
-
好的,我想我明白了,但是您可能希望扩展您的示例数据以包含不存在“状态”记录的情况 - 因为目前您的示例数据未涵盖这些情况。如果您可以将数据显示为格式化文本而不是图像,也可供将来参考。创建测试数据的 DDL/DML 语句将是理想的。
标签: sql sql-server tsql join stored-procedures