简体   繁体   English

CASE 表达式的 CROSS APPLY

[英]CROSS APPLY for CASE expressions

Is there any value in using a CROSS APPLY to encapsulate CASE expression(s).使用 CROSS APPLY 来封装 CASE 表达式是否有任何价值。 Let me explain the question with an example.让我用一个例子来解释这个问题。

Data Setup数据设置

DECLARE @data AS TABLE([id] INT IDENTITY(1,1), [value] BIGINT);
INSERT INTO @data([value])
VALUES (100), (200), (7), (128), (315);

Query #1查询#1

The following query uses a traditional pattern of CASE expressions in the SELECT statement.以下查询在 SELECT 语句中使用 CASE 表达式的传统模式。

SELECT [id]
, [value]
, CASE WHEN [value] < 100 THEN 'CLASS-C'
    WHEN [value] < 200 THEN 'CLASS-B'
    ELSE 'CLASS-A' END AS [rating]
FROM @data

Query #2查询#2

Encapsulates the CASE expression in an APPLY将 CASE 表达式封装在 APPLY 中

SELECT [id]
, [value]
, [rating]
FROM @data
CROSS APPLY(SELECT CASE WHEN [value] < 100 THEN 'CLASS-C'
    WHEN [value] < 200 THEN 'CLASS-B'
    ELSE 'CLASS-A' END AS [rating]) AS [applied]

Basic Analysis基本分析

Results of both queries are the same and the execution plan is also similar.两个查询的结果相同,执行计划也相似。

You can refer rating multiple times in the SELECT , WHERE , GROUP BY , or later in the FROM clause.您可以在SELECTWHEREGROUP BY或后面的FROM子句中多次引用rating

This is a convenient way to define columns referred to multiple times.这是定义多次引用的列的便捷方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM