`
baobeituping
  • 浏览: 1068407 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

探讨SQL Server中Case 的不同用法

阅读更多

 CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

  CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

  首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

SELECT <myColumnSpec> =
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

  在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

USE pubs
GO
SELECT
    Title,
    'Price Range' =
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END
FROM titles
ORDER BY price
GO

  这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*)
FROM titles
GROUP BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END
GO

  你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:

USE pubs
GO
SELECT
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END AS Range,
    Title
FROM titles
GROUP BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END,
    Title
ORDER BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END,
    Title
GO

  注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。

  除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。


分享到:
评论

相关推荐

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    - **SQL语句语法**:包括SELECT、INSERT、UPDATE、DELETE等常用语句的使用方法。 - **数据类型**:介绍了SQL Server支持的各种数据类型,如数值类型、字符类型、日期时间类型等。 - **变量与常量**:讲解如何定义...

    Inside Microsoft SQL Server 2008 T-SQL Programming

    《Inside Microsoft SQL Server 2008 T-SQL Programming》这本书深入探讨了SQL Server 2008中的T-SQL编程技术,这是SQL Server数据库管理与开发的核心语言。T-SQL,即Transact-SQL,是SQL的一个扩展,主要用于微软的...

    Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询.part1

    《Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询》是一部深入探讨SQL Server 2005数据库管理系统中Transact-SQL(T-SQL)查询技术的专业著作。本部分主要聚焦于如何高效、准确地在SQL Server 2005环境中...

    SQL Server行转列使用

    在SQL Server中,有两种主要的方法可以实现这一转换: 1. 使用CASE语句: CASE语句是SQL中一个非常强大的逻辑表达式,它可以根据条件返回不同的值。在行转列中,我们可以用多个CASE语句来创建新的列,并根据原始...

    SQL 关于记录排序 sqlserver

    根据提供的文件信息,我们可以深入探讨 SQL 服务器中的记录排序功能,特别是 `RANK()` 函数在 SQL Server 中的应用,以及如何在 Oracle 数据库中实现类似的功能。此外,我们还将涉及基于排序的操作,如更新(`UPDATE...

    sqlserver汉字转拼音(绝对的经典直接创建可用)

    根据提供的文件信息,本文将对如何在SQL Server中实现汉字到拼音的转换这一技术进行详细的解析与探讨。此方法提供了一种直接可用的功能,能够帮助用户轻松地将数据库中的汉字字段转换为对应的拼音形式。 ### SQL ...

    Microsoft SQL Server 2005技术内幕:T-SQL查询

    《Microsoft SQL Server 2005技术内幕:T-SQL查询》是一本专注于SQL Server 2005数据库管理系统中T-SQL(Transact-SQL)查询语言的专著。这本书是技术内幕系列的一部分,旨在为读者提供深入、全面的T-SQL查询知识,...

    SQL SERVER中动态排序数据库查询结果的方法探讨.pdf

    文章中提到了动态排序方法的具体实现,关键在于结合SQL SERVER中的存储过程以及CASE语句和ORDER BY子句。通过存储过程,可以根据传入的参数动态地构建带有ORDER BY子句的SELECT语句,从而达到动态排序的目的。例如,...

    SQLServer行列互转实现思路(聚合函数)

    本篇文章将深入探讨如何使用聚合函数Pivot和Unpivot来实现这一目标,特别是针对SQL Server数据库。 首先,让我们了解什么是行转列。行转列就是将表格中的某列值变为新的列名,而原本的行数据则对应到这些新列中。举...

    inside.microsoft.sql.server.2005.t-sql.querying

    《Inside Microsoft SQL Server 2005: T-SQL Querying》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。该书由Microsoft Press出版,旨在帮助开发者和数据库管理员掌握在SQL Server 2005环境下进行高效、...

    SQL_SERVER命令大全.pdf

    在这份《SQL_SERVER命令大全.pdf》中,我们将会详细探讨SQL Server中各个基本和高级SQL命令的用法。 首先,数据操作语言(DML)是SQL Server中最基础的一组命令,用于管理数据库中的数据。DML包括以下几个主要命令...

    sqlserver 把行转成列

    在SQL Server中,将行转换为列是一种常见的数据操作,主要通过使用PIVOT操作或者CASE语句来实现。这种转换对于数据透视、数据分析以及报表制作等场景非常有用。下面我们将详细探讨这两种方法。 首先,PIVOT是SQL ...

    SQL SERVER 2005技术内幕:T-SQL查询

    《SQL SERVER 2005技术内幕:T-SQL查询》是数据库开发人员不可或缺的一本指南,它深入探讨了SQL Server 2005中的Transact-SQL(T-SQL)查询技术。这本书以其详尽的解释和实用的示例,帮助读者掌握T-SQL查询的精髓,...

    SQL Server中行转列问题的终极解决

    在SQL Server中,实现行转列有多种方法,如PIVOT操作、动态SQL以及使用CASE语句。其中,CASE语句是一种灵活且通用的方法,适用于那些不支持PIVOT或需要动态生成列的场景。CASE语句允许我们在查询中根据条件创建新的...

    SQL.Server.2005.技术内幕.T-SQL程序设计.pdf

    《SQL Server 2005 技术内幕:T-SQL程序设计》是一本深入探讨SQL Server 2005数据库管理系统中T-SQL(Transact-SQL)编程的权威著作。T-SQL是SQL Server的主要查询语言,用于数据查询、更新、插入和删除,以及复杂的...

    SQL Server T-SQL Recipes, 4th Edition

    - **流程控制**: 讨论`IF...ELSE`, `WHILE`, `CASE`等结构的使用方法,以实现更复杂的逻辑处理。 - **错误处理**: 探讨如何捕获和处理执行过程中的异常情况。 **3. Working with NULLS** - **NULL值处理**: 阐述...

    SQL应用:研究SqlServer中Bit字段索引性能问题.

    本文将通过一系列实验来探讨在SqlServer中,针对`Bit`字段建立索引的实际效果,并与使用`Tinyint`类型进行对比。 #### 研究方法 本研究主要采用以下步骤: 1. **创建六张表**:分为两组,一组使用`Bit`字段,另一...

    SQL Server高级内容之case语法函数概述及使用

    在C#中,switch-case结构用于根据变量的值执行不同的代码块,而在SQL Server中,CASE函数类似,但更注重返回值而不是执行代码块。 4. CASE与C#的if-else if语法比较: 在C#中,if-else if语句用于条件判断,而在...

    根据年月日生成编号sqlserver

    本文将深入探讨如何在SQL Server环境中实现这一功能,并解释所提供代码片段的具体含义与工作原理。 ### 一、理解代码逻辑 首先,我们创建了一个名为`test`的表,其中包含一个主键字段`iid`,类型为`varchar(32)`。...

    Case12_1.rar_c#与sql sever_case12

    本案例"Case12_1"将深入探讨C#与SQL Server的连接过程,以及如何进行数据交互,为初学者提供一个清晰的学习路径。 首先,要建立C#与SQL Server的连接,我们需要使用ADO.NET(ActiveX Data Objects .NET)框架。ADO...

Global site tag (gtag.js) - Google Analytics