如何改进使用两列的 case 语句

2024-07-03

我有一个名为“购买”的表,其中有一个“状态”列,其中 1 已授权,2 已完成(还有一些其他值)。

我还有一个 Retailer 表,其中有一列 RetailerProcessType,其中 1 是一步,2 是两步。

我有以下疑问:

CASE purc.State
    WHEN 1 THEN '"AUTHORISED"'
    WHEN 2 THEN '"AUTHORISED"'
    WHEN 4 THEN '"AUTHORISED"'
    ELSE '"DECLINED"'
 END                                                                     
 AS Autorised_Decline_Status,

但我需要做的事情如下:

WHEN STATE = 2 AND RetailerProcessType = 1 THEN '"AUTHORISED"'
WHEN STATE = 1 AND RetailerProcessType = 2 THEN '"PENDING"'
WHEN STATE = 2 AND RetailerProcessType = 2 THEN '"AUTHORISED"'
ELSE '"DECLINED"'

我能想到的唯一方法就是拥有一个巨大的IF围绕查询的声明,一个用于一步零售商,另一个用于两步,因为我的理解是WHEN子句不能有AND in it.

然而,这似乎很啰嗦;有人有更好的想法吗?


你可以这样做:

-- Notice how STATE got moved inside the condition:
CASE WHEN STATE = 2 AND RetailerProcessType IN (1, 2) THEN '"AUTHORISED"'
     WHEN STATE = 1 AND RetailerProcessType = 2 THEN '"PENDING"'
     ELSE '"DECLINED"'
END

你可以做的原因AND这是你没有检查CASE of STATE,但你是 CASING 条件。

这里的关键部分是STATE条件是的一部分WHEN.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何改进使用两列的 case 语句 的相关文章

  • 如何避免使用 Cursor 来实现此伪代码 - SQL Server

    CREATE PROCEDURE p processDataFor accountId BEGIN for each item in select from Accounts where accountId accountId and is
  • 删除 IF ELSE 语句中的临时表

    我在这里面临僵局 问题是我必须更改使用 3 个不同临时表的过程 为了便于对话 让我们将它们命名为 temptable1 temptable2 temptable3 我无法在这里复制 粘贴整个过程 但总体思路是这样的 原始过程 procedu
  • 在存储过程中验证用户的最简单方法?

    我需要一个存储过程 可以通过发送以下内容来检查登录尝试时他们是否是有效用户login and password查看它们在数据库中是否匹配 有没有一种简单的方法可以做到这一点 如果没有更多信息 我目前能提供的最好信息是 CREATE STOR
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • SQL Server 架构和默认架构

    我的数据库中有一个模式定义 除了现在每次执行 sql 语句时我都必须提供模式 SELECT FROM myschema table 我使用 Management Studio 为我的用户设置了默认架构 并运行了ALTER USER myUs
  • 在 SQL Server 2005/2008 中存储历史数据的最佳方式是什么?

    我的简化和人为的示例如下 假设我想每天测量和存储世界上所有城镇的温度 和其他值 我正在寻找一种存储数据的最佳方法 以便可以轻松获取所有城镇的当前温度 就像获取一个城镇历史上的所有温度一样 这是一个很容易解决的问题 但我正在寻找最好的解决方案
  • SQL - 添加从条件开始的顺序计数器列,具有分组依据和非递增 ID

    这个问题的棘手版本 SQL 添加从条件开始的顺序计数器列 https stackoverflow com questions 57897292 sql add sequential counter column starting at co
  • 如何根据条件选择列?

    我有一个名为 status 的变量 我在此 select 语句之前设置了它 Select ordr num as num ordr date as date ordr ship with as shipwith From order whe
  • Microsoft T-SQL 到 Oracle SQL 的转换

    我已经使用 T SQL 多年了 但我刚刚转到一个需要编写一些 Oracle 内容的组织 可能只是简单的 CRUD 操作 至少在我适应之前是这样 我不会将数据库从一个数据库迁移到另一个数据库 只是从应用程序开发的角度与现有 Oracle 数据
  • 仅当列不为 NULL 时才连接列

    我有一个像这样的 SQL Server 表 PERSON NAME PHONE PHONE1 PHONE2 PHONE CONCAT Name1 12345 Null Null Null
  • SQL Server 2014执行计划创建需要很长时间(旧版本中很快)

    我在 SQL Server 2014 中遇到一个查询问题 第一次运行该查询时 需要很长时间才能生成执行计划 奇怪的是 它在 SQL Server 的所有早期版本 2012 2008 R2 2008 等 中都运行良好 它似乎与所涉及的表之一上
  • T-SQL 中的不等式测试

    我刚刚在 WHERE 子句中遇到了这个 AND NOT t id id 这与以下内容相比如何 AND t id id Or with AND t id lt gt id 我总是自己写后者 但显然其他人有不同的想法 其中一个的表现会比另一个更
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • 为什么为 DATETIME 值定义加法运算符而不为 DATE 定义?

    我知道解决方法是使用DATEADD对于这两种数据类型 我想了解为什么语言设计者选择为一种数据类型而不是另一种数据类型定义此运算符 当您尝试直接在DATE DECLARE tomorrow DATE CONVERT DATE GETDATE
  • 与 NULL 合并

    我在视图中发现了这段 SQL 片段 我对它的用途感到相当困惑 为简洁起见 实际的 SQL 被缩短了 SELECT COALESCE b Foo NULL AS Foo FROM a LEFT JOIN b ON b aId a Id 我想不
  • 如何改进使用两列的 case 语句

    我有一个名为 购买 的表 其中有一个 状态 列 其中 1 已授权 2 已完成 还有一些其他值 我还有一个 Retailer 表 其中有一列 RetailerProcessType 其中 1 是一步 2 是两步 我有以下疑问 CASE pur
  • 除了结构化 XML 数据之外,还选择行数据

    我知道如何将 XML 变量连接到其他表 但在本例中 我尝试从表中选择每一行以及 XML 的结构从每个相应的表行 在那一行旁边 我无法在网上找到任何示例来帮助解决此问题 因为大多数示例都处理单个 XML 值 抱歉 如果有的话 我无法在无数其他
  • 比较跨多个数据库的存储过程 (SQL Server)

    SQL 大师 我们的架构由多个客户数据库和一个公共代码库组成 当我们部署数据库更改时 必须针对每个数据库运行脚本 由于部署问题 我们的存储过程有时会彼此不同步 我想创建一个脚本来返回这些不匹配的过程 以确保我们在部署后拥有数据库的同步副本
  • 超过 1 列具有 string_agg 的唯一值

    我正在尝试分组并获取多列的值列表 这是一个例子 City State Income Salem OH 40000 Salem OH 45000 Mason OH 50000 Dayton OH 60000 Salem MA 40000 Ma

随机推荐