gpt4 book ai didi

tsql - T-SQL VIEW - CTE + UNPIVOT 对比 UNION 对比其他技术

转载 作者:行者123 更新时间:2023-12-04 13:00:49 25 4
gpt4 key购买 nike

我想知道哪种解决方案更好。我必须在 View 中声明一些变量,这些变量是使用 T-SQL 日期函数(DATEADD、DATEPART、GETDATE() 等)计算的。

经过一些研究,我写了这个:

WITH DatePeriods(ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate) AS
(
SELECT "...date functions..." AS ThisWeek
"...date functions..." AS LastWeek
"...date functions..." AS MonthToDate
"...date functions..." AS QuarterToDate
"...date functions..." AS YearToDate
)
SELECT Desciption,Value
FROM DatePeriods
UNPIVOT
(
Value FOR Desciption IN (ThisWeek,LastWeek,MonthToDate,QuarterToDate,YearToDate)
) AS Source

它看起来很酷,因为我有“cte”和“unpivot”。如果我想添加其他日期变量,我只应在 CTE 的选择中插入。

另一种解决方案是使用普通的“联合”:

SELECT  'ThisWeek',"...date functions..." AS ThisWeek
UNION
SELECT 'LastWeek',"...date functions..." AS LastWeek
UNION
SELECT 'MonthToDate',"...date functions..." AS MonthToDate
UNION
SELECT 'QuarterToDate',"...date functions..." AS QuarterToDate
UNION
SELECT 'YearToDate',"...date functions..." AS YearToDate

我认为这不太好,因为一个新的日期变量意味着新的并集,但毕竟只有几个变量之间的并集。

谁能告诉我在这种情况下哪种技术是好的做法,甚至可以提供其他解决方案?

提前致谢。

编辑:

这是我想要的输出:

Desciption      Value
ThisWeek 2012-08-05 08:55:23.013
LastWeek 2012-07-29 08:55:23.013
MonthToDate 2012-07-08 08:55:23.013
QuarterToDate 2012-05-08 08:55:23.013
YearToDate 2011-08-08 08:55:23.013

最佳答案

如果您查看查询计划,您会发现您的 union 版本的成本比您的 unpivot 版本高得多。但是,如果您更改为 union all,它将比 unpivot 更好。

如果您使用的是 SQL Server 2008 或更高版本,则可以改用 values,根据执行计划,成本与 union all 相同。

值版本:

select Description, Value
from (values ('ThisWeek', getdate()+1),
('LastWeek', getdate()+2),
('MonthToDate', getdate()+3),
('QuarterToDate', getdate()+4),
('YearToDate', getdate()+5)
) as T(Description, Value)

联合所有版本:

SELECT  'ThisWeek' AS Description, getdate()+1 AS Value
UNION ALL
SELECT 'LastWeek', getdate()+2
UNION ALL
SELECT 'MonthToDate', getdate()+3
UNION ALL
SELECT 'QuarterToDate', getdate()+4
UNION ALL
SELECT 'YearToDate', getdate()+5

unionunion all 慢的原因是它试图从 union all 包含所有行的结果集中删除重复项不考虑值(value)。

关于tsql - T-SQL VIEW - CTE + UNPIVOT 对比 UNION 对比其他技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com