SQL:创建临时变量

标签 sql sql-server

我是 SQL 新手,所以请考虑这个菜鸟问题。另外,我很尴尬地承认我无法在 Google 中搜索到正确的关键字,而且我的时间已经不多了,所以我决定在这里提问。

代码:

select
 *,
 price * quantity as [Total price],
 case
   when [Total price]>100 and [Total price]<= 200 then '2%'
   when [Total price]>200 and [Total price]<= 300 then '3%'
   when [Total price]>300 and [Total price]<= 400 then '4%'
   else '0%'
 end as tax
from
grocery

正如你所看到的,我想做的是尝试在执行 SQL 语句时创建一个临时变量,但是,这给了我错误

错误 1:无法准备报表 [1 没有这样的列:总价]

我怎样才能做到这一点?

最佳答案

一种快速方法是使用 CTE(公用表表达式)。这允许您预先计算一些值,然后在查询正文中引用这些值。

如果带有 CTE 的语句不是批处理中的第一条语句,则需要使用 ; 结束前面的内容:

 ;
 With Totals as
 (
    select  *,
            price * quantity as [Total price],
    from    grocery
 )
 select  *
    ,  case
         when [Total price]>100 and [Total price]<= 200 then '2%'
         when [Total price]>200 and [Total price]<= 300 then '3%'
         when [Total price]>300 and [Total price]<= 400 then '4%'
        else '0%'
     end as tax
 from
   Totals

顺便说一句,问题的根源在于您无法定义表达式,然后在查询中按名称使用表达式。您可以重复使用该表达式,但不能按名称重复使用:

select  x + 1 as Expr1
   ,    (x + 1) * 2  as Expr2
from   Table1

这会起作用,但以下不会起作用:

select x + 1 as Expr1
   ,   Expr1 * 2 as Expr2   -- This won't work
from   Table1

关于SQL:创建临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811265/

相关文章:

sql - 自定义查询以显示具有重复计数的记录及其重复出现

sql-server - SQL Server : how to prevent new index indexing existing data

sql-server - 如何在VS 2015中调试存储过程?

sql - 将数据拆分为多个 SQLite 表或数据库是否会更快地检索数据

php - 是否可以保持 MYSQL session 打开?

sql - JSON - 如何将数组附加到 sql 中的数组

mySQL查询ID为空的关联表

php - 如果一个条件不存在则返回值 mysql

sql-server - 如何获取连接到 Azure Synapse 数据库的用户的安全 ID?

sql - 具有 STUFF 和 FOR XML 路径的 T-SQL 中 WHERE 子句中的动态 LIKE