-1

桌子

ID | col1 | col2
-------------------------
1  | val1 | val2    
2  | val1 | null
3  | val1 | val3
4  | val5 | null

客户端将始终传递有效的 col1 和 col2 值来选择表中可能不存在 col2 的单行。因此,如果 col2 可用,则它应该返回提供 col2 的行,否则返回包含 col2 = null 和 col1 的行

return  ID = 2  if col1 = val1 and col2 = val10 
return ID = 3 if col1 = val1 and col2 = val3 

这如何通过单个 SQL 查询来完成?

4

2 回答 2

1

这将起作用。如果没有 top 1,查询可能会选择 2 行,所以我命令它首先返回 col2 不为空的行。

select top 1 * from table1 
where col1 = @param1 and (col2 is null or col2 = @param2)
order by case when col2 is null then 1 else 0 end
于 2013-11-05T05:25:21.333 回答
1
select * from table1 where col1 = @col1 and col2 = @col2
union
select * from table1 as t where col1 = @col1 and col2 is null
and not exist (select * from table1 as c where c.col1 = t.col1 and c.col2 = @col2)

我不确定 top 1 的解决方案是否更快,有时订购速度很慢。

于 2013-11-05T09:52:41.523 回答