【发布时间】:2013-01-16 23:04:04
【问题描述】:
是否可以为 PIVOT 操作定义“回退”或“其他”情况?让我玩一下 MSDN 中的示例:
-- Pivot table with one row and five columns
SELECT
'AverageCost' AS Cost_Sorted_By_Production_Days,
[0], [1], [2], [3], [4],
[??magicalELSEkeyword??] as 'too many days'
FROM
(
SELECT DaysToManufacture, StandardCost
FROM Production.Product
) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN
(
[0], [1], [2], [3], [4],
[??magicalELSEkeyword??]
)
) AS PivotTable;
Pivot 行为非常明显 - 它在指定值列表的出现上选择/案例/组。我想看到的是一个“后备”案例。在上面的查询中,我想获取:
- “即时”0 天流程的平均成本
- 1 天流程的平均成本
- ...
- 4 天流程的平均成本
- 所有其他人的平均费用
请注意,“通缉”案件列表是不变的且已知的。我不想产生未知列数的枢轴。我只想将所有不匹配的值分组为名为“其他”的简单结果
我在MSDN 上的 T-SQL 语法参考中没有看到任何这种可能性,我只是觉得很难相信这是不可用的。它似乎是如此有用且实现起来微不足道,以至于忽略它会很痛苦..
是的,我知道它可能会引入一个讨论是否以及如何处理出现在“其他”中的 NULL 值,但这只是两种特殊情况..它们可以像在任何聚合函数中一样被忽略——这将实现起来很简单,并且 100% 良好并且与 SQL 的其余部分保持一致——或者可以通过两个不同的备用关键字来处理,例如 ELSE-NOT-NULL 与 ELSE-OR-NULL..
真的缺少这个功能吗?
【问题讨论】:
标签: sql-server tsql pivot