我已經繼承了一個存儲過程,其代碼如下所示。這是一種窮人的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