在 teradata 中声明变量
declare variable in 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 上可能有类似的东西
您不能在典型的 Teradata sql 脚本中创建变量。相反,创建一个易变的 table 并将 "variable" 的值存储在 table 中。然后在需要使用它时从你的 volatile table 中查询值。它看起来像这样:
CREATE VOLATILE TABLE MyVariable
(
VariableValue int
) Primary index (VariableValue)
ON COMMIT PRESERVE ROWS;
INSERT INTO MyVariable(VariableValue)
VALUES (5);
SELECT COALESCE(
CASE WHEN X >= VariableValue THEN 'A' ELSE NULL END
,CASE WHEN Y >= VariableValue THEN 'B' ELSE NULL END
)
FROM YourTable, MyVariable;
如果您决定将逻辑放在存储过程中,那么您可以 DECLARE
变量。
下面是实际的变量声明规则:
http://info.teradata.com/htmlpubs/DB_TTU_15_00/index.html#page/SQL_Reference/B035_1148_015K/ch08.143.035.html#ww593657
将变量加载到 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 交叉连接到您的其他 tables(或派生的 tables)并进行相同的引用,就像上面的 Volatile table 答案一样,但没有实际存储的膨胀。
使用 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 中我可以这样定义一个变量:
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 上可能有类似的东西
您不能在典型的 Teradata sql 脚本中创建变量。相反,创建一个易变的 table 并将 "variable" 的值存储在 table 中。然后在需要使用它时从你的 volatile table 中查询值。它看起来像这样:
CREATE VOLATILE TABLE MyVariable
(
VariableValue int
) Primary index (VariableValue)
ON COMMIT PRESERVE ROWS;
INSERT INTO MyVariable(VariableValue)
VALUES (5);
SELECT COALESCE(
CASE WHEN X >= VariableValue THEN 'A' ELSE NULL END
,CASE WHEN Y >= VariableValue THEN 'B' ELSE NULL END
)
FROM YourTable, MyVariable;
如果您决定将逻辑放在存储过程中,那么您可以 DECLARE
变量。
下面是实际的变量声明规则: http://info.teradata.com/htmlpubs/DB_TTU_15_00/index.html#page/SQL_Reference/B035_1148_015K/ch08.143.035.html#ww593657
将变量加载到 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 交叉连接到您的其他 tables(或派生的 tables)并进行相同的引用,就像上面的 Volatile table 答案一样,但没有实际存储的膨胀。
使用 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!)。