【发布时间】:2017-08-30 06:08:39
【问题描述】:
我有一个问题
SELECT ROW_NUMBER() OVER (ORDER BY getdate()) AS ID, GETDATE() as time, tmp.* from
( select RecordType, TrnYear, SUM(MonthlySales) as AnnualSales
FROM vwKPI_SalesGraphMonthly
WHERE RecordType = 'A'
GROUP BY RecordType, TrnYear
UNION ALL
SELECT RecordType, TrnYear, SUM(MonthlySales) as AnnualSales
FROM vwKPI_SalesGraphMonthly
WHERE RecordType = 'B'
GROUP BY RecordType, TrnYear
UNION ALL
SELECT RecordType, TrnYear, SUM(MonthlySales) as AnnualSales
FROM vwKPI_SalesGraphMonthly
WHERE RecordType = 'R'
GROUP BY RecordType, TrnYear
UNION ALL
SELECT 'Y', TrnYear, SUM(MonthlySales) as AnnualSales
FROM vwKPI_SalesGraphMonthly CROSS JOIN ArControl
25 THEN FinPeriod -1 ELSE FinPeriod END)
WHERE RecordType = 'B' AND TrnMonth <=DATE_PART('month', GETDATE())
GROUP BY RecordType, TrnYear
) tmp
vwKPI_SalesGraphMonthly 是另一个大约 300 行的查询。
我不想在此查询中插入 vwKPI_SalesGraphMonthly 的定义 4 次。有没有办法在查询中只声明一次vwKPI_SalesGraphMonthly 的定义并在所有联合中使用它。
【问题讨论】:
-
Greenplum 是否支持common table expressions?
-
是的,Greenplum 支持 CTE,根据我的经验,如果您使用 CTE,性能会下降