我已经继承了一个存储过程,其代码如下所示。这是一种穷人的PIVOT,我认为(必须在SQL Server 2000上运行)。在SQL中,“MAX(SUBSTRING(CONVERT(X),1,DATALENGTH(CONVERT(X))* 1或0))的目的是什么?
SELECT
[TheDate] = MAX(
substring(
CONVERT(VarChar(100), thedate, 101),
1,
datalength(CONVERT(VarChar(100), thedate, 101)) *
(CASE index WHEN 123 THEN 1 ELSE 0 END))),
[Scaled] = MAX(
substring(
CONVERT(VarChar(100), Scaled),
1,
datalength(CONVERT(VarChar(100), Scaled)) *
(CASE index WHEN 123 THEN 1 ELSE 0 END))),
[Value] = MAX(
substring(
CONVERT(VarChar(100), [Value]),
1,
datalength(CONVERT(VarChar(100), [Value])) *
(CASE index WHEN 123 THEN 1 ELSE 0 END))),
-- Repeat for other values of "index"
GROUP BY other columns
有没有人见过这个构造?不是 “支点” 的东西,而是
MAX(SUBSTRING(CONVERT(X),1,DATALENGTH(CONVERT(X))*1 or 0))
为什么不直接使用
MAX(CASE index WHEN 123 THEN [Value] ELSE NULL END)
?
很高兴看到你对你的前任的理智有一些信心。 – Jimmy 2011-01-06 02:48:37
相当于'MAX(CASE索引123当时剩下([Value],100)ELSE''END)'我怀疑没有理由使用这个构造。 – 2011-01-06 02:51:41
当天,我记得CASE查询速度非常慢,特别是当单个查询中有多个查询时。也许多个SUBSTRING和CONVERTs在某种程度上更快。也许? – Bill 2011-01-06 14:29:41