当前位置: 首页 > 面试题库 >

如何避免在同一选择中多次重复计算的表达式?

越狐若
2023-03-14
问题内容

如何在同一选择中多次使用计算列而不重复表达式,也不必使用公用表表达式或复杂的子选择?

DECLARE @T TABLE ( NUM1 INT,NUM2 INT)
INSERT INTO @T VALUES (2,3);
INSERT INTO @T VALUES (5,7);
INSERT INTO @T VALUES(32,3);
INSERT INTO @T VALUES(6,8);

SELECT (NUM1+NUM2) [ADD], [ADD]*2, [ADD]/2,* FROM @T

在SQL Server 2005中有什么方法可以解决此问题?


问题答案:

您可以使用交叉申请

SELECT T2.[ADD],
       T2.[ADD]*2,
       T2.[ADD]/2
FROM @T AS T1
  CROSS APPLY (SELECT T1.NUM1+T1.NUM2) AS T2([ADD])

或CTE

WITH C AS
(
  SELECT NUM1+NUM2 AS [ADD]
  FROM @T
)
SELECT [ADD],
       [ADD]*2,
       [ADD]/2
FROM C

或子查询(也称为派生表)

SELECT T.[ADD],
       T.[ADD]*2,
       T.[ADD]/2
FROM (
       SELECT NUM1+NUM2 AS [ADD]
       FROM @T
     ) AS T

不能在声明的同一字段列表中使用列别名。



 类似资料:
  • 我使用for循环将学生详细信息添加到ArrayList。当我给第二个学生提供详细信息时,它会覆盖第一个数据。螺柱类 将数据添加到ArrayList的主类。 输出:第二个数据[2,2]后的实际输出辊数[1]。预期输出应为卷号: A1姓名: F1 L1性别:男性年龄: 11体育赛事:标枪 报名号:A2姓名:F2 L2性别:女年龄:14体育项目:100米跑 报名号:A3姓名:F3 L3性别:男性年龄:1

  • 问题内容: 我对SQL完全陌生,但是可以说,在StackExchange Data Explorer上 ,我只想按信誉列出前15位用户,并且我写了这样的内容: 我认为,这目前是有意义的,因为不是中的列。我可以轻松地说出这个问题,基本上是在重复公式。 因此,问题是: 我可以在条款中实际使用“列”吗? 我是否可能需要使用此列创建一个虚拟表/视图,然后对其进行查询? 我可以命名一个表达式吗,例如,所以我

  • 钱箱类: 商户类: 输入数据: 我的任务 计算每个商家的总金额并返回商家列表 我正在尝试使用Stream API解决这个任务。并编写了以下代码: 结果 但显然,流返回四个对象,而不是所需的两个对象。我意识到,地图(第二行)为每个cashBoxId创建了四个对象。而且我不知道如何通过进行过滤,也不知道如何获得没有重复的结果。

  • 问题内容: 我正在使用以下代码通过AJAX提交表单: 背景 我的PHP处理程序执行各种任务,然后发回响应。然后,我可以在成功或错误函数中执行某些操作。 我的问题 当用户双击表单的“提交”按钮时,将发生两次AJAX调用,这将导致我的PHP处理程序中的代码执行两次。 我的问题 如果用户双击提交,如何避免我的代码执行两次? 问题答案: 当AJAX调用再次出现时,请先禁用首次单击的“提交”按钮,然后重新启

  • 我有一个用户表,其中我有(Id,reportingUserId)。reportingUserId 包含一个字符串,该字符串表示用户向其报告的用户 Id(上级)。现在,在删除用户时,我应该检查是否有任何用户向此用户报告。如果它们存在,那么我应该将其报告用户 Id 值更改为上级的用户 Id。此处报告用户是当前用户的劣势列表。 现在,当我这样做的时候,我得到了lambda表达式中使用的在第二个if条件的

  • 我有一个简单的项目,该项目将个人信息提供给数据库(sqlite),现在我想避免插入重复值(按名称),我不能做什么?谢谢你们