在Teradata中声明变量

cs0*_*815 2 t-sql teradata

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

DECLARE @Threshold AS int;
SET @Threshold = 5;
Run Code Online (Sandbox Code Playgroud)

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

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

在TeraData上可能类似

JNe*_*ill 5

将变量加载到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
Run Code Online (Sandbox Code Playgroud)

您可以将该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
Run Code Online (Sandbox Code Playgroud)

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