热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer:案例中的多个操作

如何解决《SQLServer:案例中的多个操作》经验,为你挑选了1个好方法。

我将此案例作为更大的SQL语句的一部分:

.
.
.
CASE    
   WHEN [AEC].item = 'S' THEN [sOld].code
   WHEN [AEC].item= 'R' THEN [rOld].code
END AS [oldCode],

CASE    
   WHEN [AEC].item= 'S' THEN [sOld].system
   WHEN [AEC].item= 'R' THEN [rOld].system
END AS [oldStatusSystem],

CASE    
   WHEN [AEC].item= 'S' THEN [sNew].code
   WHEN [AEC].item= 'R' THEN [rNew].code
END AS [newCode],

CASE     
   WHEN [AEC].item= 'S' THEN [sNew].system
   WHEN [AEC].item= 'R' THEN [rNew].system
END AS [newStatusSystem],
.
.

LEFT JOIN 
    tblSystemStatuses AS [sOld] ON [AEC].oldValue = [sOld].status
LEFT JOIN
    tblSystemStatuses AS [sNew] ON [AEC].newValue = [sNew].status
LEFT JOIN
    tblSystemRoles AS [rOld] ON [AEC].oldValue = [rOld].role
LEFT JOIN
    tblSystemRoles AS [rNew] ON [AEC].newValue = [rNew].role

我想要的情况是这样的:

CASE    
   WHEN [AEC].item = 'S' 
      THEN 
           [sOld].code AS [oldCode],
           [sOld].system AS [oldStatusSystem],
           [sNew].code AS [newCode], 
           [sNew].system AS [newStatusSystem]
   ELSE WHEN [AEC].item = 'R' 
      THEN 
           [rOld].code AS [oldCode],
           [rOld].system AS [oldStatusSystem],
           [rNew].code AS [newCode], 
           [rNew].system AS [newStatusSystem]
  END

换句话说,我想作为then语句的一部分执行一些操作.我无法在任何地方看到一个例子.

我不能写if else因为我需要进行一些连接并依赖来自几个表的数据.有没有办法以我想要的方式写这个案子?



1> Gordon Linof..:

case表达式仅返回单个值.所以,你不能做你想做的事.

您可以简化逻辑,但方式略有不同.可能最好的方法是使用cross apply.请注意,这在from子句中,因为selectcan中的表达式只返回标量值.因此,您需要在选择中选择所需的列:

select v.oldcode, . . . 
from . . . cross apply
     (select v.*
      from (values ('S', [sOld].code, [sOld].system, [sNew].code, [sNew].system),
                   ('R', [rOld].code, [rOld].system, [rNew].code, [rNew].system)
           ) v(item, oldcode, oldsystem, newcode, newsystem)
      where v.item = [AEC].item
     ) v

这满足了与单个case表达式相同的需求.值得注意的是,匹配逻辑只出现一次.这个版本的优点是各个字段可以在多个表达式中使用select.


推荐阅读
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了在SQL中查询分组后每组行数的统计方法。通过使用count()函数和GROUP BY子句可以统计每组的行数,但是如何统计所有组的行数呢?本文提供了一种实现方法,并给出了相应的SQL查询语句。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
手机用户2602890485
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有