1

我需要弄清楚如何透视我拥有的一组数据,并且代码可以根据需要工作,但问题是我真的不明白为什么会这样。任何人都可以帮助一个菜鸟并解释为什么下面的代码决定'SELECT @columns = COALESCE + ...

为什么他在 COALESCE 函数中指定了两个参数?是否只是返回该表中的所有列?如果是这样,有人可以准确地分解它是如何做到的。我从这个网站上提取这段代码作为参考:(http://www.tsqltutorials.com/pivot.php

提前致谢!

DECLARE @columns VARCHAR(8000)

SELECT @columns = COALESCE(@columns + ',[' + cast(Variable as varchar) + ']',
'[' + cast(Variable as varchar)+ ']')
FROM #temp123
GROUP BY Variable


DECLARE @query VARCHAR(8000)

SET @query = '
SELECT *
FROM #temp123
PIVOT
(
MAX(VaribleValue)
FOR [Variable]
IN (' + @columns + ')
)
AS p'

EXECUTE(@query)
4

1 回答 1

1

从代码结构中我可以看出查询是为动态 PIVOT 设计的,这意味着列数可以变化;与传统 PIVOT 不同,在传统PIVOT中,您必须指定要旋转的确切列

COALESCE关键字类似于ISNULL函数,但主要区别在于您可以指定多个值来检查:

因此,例如您可以使用SELECT COALESCE(NULL, NULL, 1, NULL) AS [Output];[Output] 的值将是 1。这与说的相同,如果第一个值为 NULL;返回下一个;如果第二个值为 NULL;使用第三个;依此类推,直到找到第一个 NON-NULL 值。

因此,在您的情况下,COALESCE关键字将检查附加到该字段的@columns变量;Variable如果它为 NULL(如果Variable字段中的任何值为 NULL,则可能发生这种情况),那么它将简单地使用下一条语句。

于 2013-08-16T00:24:33.557 回答