sql - CROSS APPLY 用于 CASE 表达式
问题描述
使用 CROSS APPLY 封装 CASE 表达式是否有任何价值。让我用一个例子来解释这个问题。
数据设置
DECLARE @data AS TABLE([id] INT IDENTITY(1,1), [value] BIGINT);
INSERT INTO @data([value])
VALUES (100), (200), (7), (128), (315);
查询 #1
以下查询在 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
查询 #2
将 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]
基本分析
两个查询的结果相同,执行计划也相似。
解决方案
您可以在子句的, ,或后面rating
多次引用。SELECT
WHERE
GROUP BY
FROM
这是定义多次引用的列的便捷方式。
推荐阅读
- c# - 为什么更新其他记录时会删除一些记录?
- aws-lambda - AWS Amplify 从使用 api 类别创建的 DynamoDB 表中获取流 ARN
- java - 创建事件调度线程安全信号量
- fortran - 如何将位模式 Z'FEDCBA09' 分配给 32 位整数
- macos - macOS 上的 USB 外设仲裁
- python - 从请求库中获取方法似乎返回主页而不是特定 URL
- python-3.x - 设置标题栏的字体
- scheme - DrRacket 中的计划合同违规
- java - 如何添加编译标志VSCode
- powershell - 通过 UNIX Python 设置 ADUser