当前位置: 首页 > 面试题库 >

SQL Server 2008-SELECT子句中的Case / If语句

陶高扬
2023-03-14
问题内容

我有一个查询应该这样运行-

If(var = xyz) 
   SELECT col1, col2
ELSE IF(var = zyx)
   SELECT col2, col3
ELSE
   SELECT col7,col8

FROM 

.
.
.

我如何在T-SQL中实现此目标而不为每个子句编写单独的查询?目前我正在运行它

IF (var = xyz) {
  Query1
}
ELSE IF (var = zyx) {
  Query2
}
ELSE {
  Query3
}

只是为了根据值选择不同的列而已,这只是大量的冗余代码。还有其他选择吗?


问题答案:

此处仅需注意,出于优化的原因,最好有3个单独的SELECTS。如果只有一个SELECT,则生成的计划将必须投影所有列col1,col2,col3,col7,col8等,尽管取决于运行时@var的值,仅需要其中一些。这可能会导致计划执行不必要的聚集索引查找,因为非聚集索引不会覆盖SELECT投影的所有列。

另一方面,3个独立的SELECTS,每个仅投影所需列的选择可能会受益于非聚集索引,这些索引在每种情况下仅覆盖您的投影列。

当然,这取决于您的数据模型的实际模式和确切的查询,但这只是一个提示,因此您不会将过程性编程的命令式思维框架带入SQL的声明式世界。



 类似资料:
  • 它为集合中的每个元素重复一组语句。 此循环用于访问和操作数组或VB.Net集合中的所有元素。 此循环结构的语法是 - For Each element [ As datatype ] In group [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ el

  • 可以将select语句作为外部select语句的语句序列的一部分。 即使内部和外部选择的case常量包含公共值,也不会产生冲突。 例子 (Example) Module decisions Sub Main() 'local variable definition Dim a As Integer = 100 Dim b As Integer = 200

  • 本文向大家介绍VBS基础篇 - 条件语句(if与Select Case),包括了VBS基础篇 - 条件语句(if与Select Case)的使用技巧和注意事项,需要的朋友参考一下 If...Then...Else 在下面的情况中,您可以使用 If...Then...Else 语句: 在条件为 true 时,执行某段代码 选择两段代码之一来执行时 要运行多行代码,必须使用多行(或块)语法,多行(或块

  • 问题内容: 以下工作-拒付金额等于1时返回Y,否则默认为N 但是我似乎无法使这一工作正常?语法有效吗 问题答案: 大概这可以工作:

  • 问题内容: SQL不是我的强项,但是我无法弄清楚为什么它不起作用。我只是想基于一个值运行一个不同的AND语句。具体来说,如果foo =0,我想在dateDiff函数中更改datePart 问题答案: 试试这个-

  • 问题内容: 我正在尝试在子句中构建case / if语句。 问题在于该列包含文本和数字。我要与之比较的列是一个整数。 有没有一种方法可以检测列是否包含字符或数字,然后将其设置为0,然后将其设置为0? 这是一个伪查询可以帮助您: 问题答案: 您正在寻找IsNumeric,但它并不总是有效(+,-和。是数字),因此您需要使用GBN所描述的解决方案,即在您的varchar中添加.0e0