tsql - 在 Teradata 中声明变量

标签 tsql teradata

在 TSql 中,我可以像这样定义一个变量:

DECLARE @Threshold AS int;
SET @Threshold = 5;

然后我可以像这样使用它:

,COALESCE(
    CASE WHEN X >= @Threshold THEN A ELSE NULL END
    ,CASE WHEN Y >= @Threshold THEN B ELSE NULL END
) AS Bla

TeraData 上可能存在类似的情况

最佳答案

将变量加载到 CTE 并在 SELECT 语句中引用 CTE 是很常见的:

WITH variables AS
(
    SELECT 5 as thresholdmin, 10 as thresholdmax
)
SELECT CASE WHEN 6 BETWEEN thresholdmin and thresholdmax then 1 ELSE 0 END as thresholdCheck 
FROM variables

您可以将该 CTE 交叉联接到其他表(或派生表)中,并进行与上面的 volatile 表答案非常相似的相同引用,但不会造成实际存储的膨胀。

使用 sys_calendar 的示例:

WITH variables AS
(
    SELECT DATE '2016-01-01' as minDate, DATE '2016-01-31' as maxDate
)
SELECT cal.calendar_date 
FROM sys_calendar.calendar cal, variables
WHERE cal.calendar_date BETWEEN variables.minDate and variables.maxDate
ORDER BY cal.calendar_date

这是一个很好的解决方案,因为它可以在任何支持 CTE 的 RDBMS 上运行(因此除了 mysql --UPDATED-- mysql 8.0+ 之外的所有内容现在都支持 CTE!)。

关于tsql - 在 Teradata 中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501215/

相关文章:

sql-server - 如何在SQL 2008 R2中记录警告(严重性错误)

java - 列未加载到数据源资源管理器或 Eclipse 中的 JPA 生成自定义实体向导中

teradata - 如何在 Teradata 14 中对子字符串进行分组?

Teradata:有没有办法从 View 或选择语句生成 DDL?

c# - 将按位枚举映射到 sql 列值

sql-server - SQL 服务器 2005 : Insert query returning Operand type clash: ntext is incompatible with smallint

SQL Server - 缺少 NATURAL JOIN/x JOIN y USING(字段)

sql-server-2005 - 如何获取列上存在的统计信息(如果有)?

mysql - 如何在 Teradata Viewpoint 中查找外键

postgresql - 通过 Postgres 连接到 Teradata DB