在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上
在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並引用CTE的SELECT語句:
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(所以一切除了MySQL的)任何RDBMS工作。
@ BillCram的已刪除評論:我認爲CTE路線與tsql中的變量用法更爲同義。交給腳本的用戶只需要在CTE聲明的最上面(而不是通過sql查找)找到'5'並將其更改爲'6'。如果您需要更強大且可重複的內容,請轉至宏或程序。 – JNevill
你無法在典型的Teradata sql腳本中創建變量。相反,創建一個易變的表格並在表格中存儲「變量」的值。然後在需要使用時從易失性表中查詢值。這將是這個樣子:
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
我知道易變表,但你真的建議在案件陳述中使用它們嗎?這將如何工作? – cs0815
我用一個例子更新了我的答案。如果你習慣了其他的數據庫,我會承認它看起來很麻煩。 –
你是如何執行你的查詢? SQL助手,BTEQ等? – Andrew
查看http://developer.teradata.com/blog/dnoeth/2011/03/global-and-session-level-parameters-in-sql,但不要嘗試使用QueryBand方法,它仍然存在缺陷。 – dnoeth