在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上可能类似
将变量加载到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!)。
| 归档时间: |
|
| 查看次数: |
12046 次 |
| 最近记录: |