gpt4 book ai didi

sql - 使用 UNPIVOT 和 SELECT MAX() 将行数据中的 SELECT MAX() 值转换为列数据

转载 作者:行者123 更新时间:2023-12-01 18:52:15 26 4
gpt4 key购买 nike

我有一个名为金额的表,如下所示:

// structure 1
+-----+-----+-----+-----+-----+-----+-----+
| MON | TUE | WED | THU | FRI | SAT | SUN |
+-----+-----+-----+-----+-----+-----+-----+
| 1 | 6 | 3 | 1 | 1 | 3 | 0 |
+-----+-----+-----+-----+-----+-----+-----+

我需要从上面的行中获取 MAX() 值(表格只有一行)。

我如何PIVOT表格,使其读起来像这样:

// structure 2
+-----+-----+
| DAY | AMT |
+-----+-----+
| MON | 1 |
+-----+-----+
| TUE | 6 |
+-----+-----+
| WED | 3 |
+-----+-----+
| THU | 1 |
+-----+-----+
| FRI | 1 |
+-----+-----+
| SAT | 3 |
+-----+-----+
| SUN | 0 |
+-----+-----+

...然后选择 AMT 列的 MAX() 值:

SELECT MAX(AMT)
FROM (
SELECT * FROM amounts
) AS amts
PIVOT (
AMT FOR * IN ... // got stuck here, pivots are confusing
) AS highest_amt

有没有更有效的方法来做到这一点?

最佳答案

您无需对结果进行逆透视。如果结果来自报告 View ,这可能会导致执行计划效率低下。

您可以使用 VALUES 构造函数从 View 的列创建值表,然后获取最大值,如下所示:

select MAX(dayvalues.v)
from
amounts
CROSS APPLY (VALUES (amounts.MON),(amounts.TUE),(amounts.WED),(amounts.THU),
(amounts.FRI),(amounts.SAT),(amounts.SUN)
) dayvalues(v)

VALUES 将从 amounts 中找到的值创建一个表格,然后 MAX 将选择最大值。 CROSS APPLY 将右侧的表值函数 (VALUES) 应用到左侧的每一行。

这意味着 View 只执行一次

关于sql - 使用 UNPIVOT 和 SELECT MAX() 将行数据中的 SELECT MAX() 值转换为列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26544889/

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