获取保存行最大值的列名

伙伴

我已经生成了一个广泛的视图,该视图根据不同的统计模型来模拟某些事件。这些模型在每个列标题中均用数字定义,并且行的最大值是最佳模型。

生成的表看起来(部分)如下:

+--------+----+------+------+------+------+------+------+
| Number | LI | PHSE | 0505 | 0506 | 0507 | 0508 | 0509 | [...] etc.
+--------+----+------+------+------+------+------+------+
| 100254 | 2  | M1   |   44 |   46 |   45 |   44 |   44 |
| 100254 | 2  | M2   |   36 |   36 |   35 |   37 |   37 |
| 100254 | 2  | M3   |    5 |    5 |    5 |    5 |    5 |
| 100254 | 2  | R1   |   34 |   36 |   37 |   37 |   37 |
| 100254 | 2  | R2   |   41 |   41 |   40 |   41 |   41 |
| 100329 | 1  | M1   |   37 |   38 |   38 |   38 |   39 |
| 100329 | 1  | M2   |   31 |   29 |   28 |   29 |   29 |
| 100329 | 1  | M3   |    6 |    6 |    6 |    6 |    6 |
| 100329 | 1  | R1   |   29 |   29 |   29 |   30 |   30 |
| 100329 | 1  | R2   |   25 |   26 |   26 |   27 |   26 |
+--------+----+------+------+------+------+------+------+
  [...] etc.

现在,我想在每一行中找到最大值,并显示相应的列名;

| Number | LI | PHSE | MAXCOL |
+--------+----+------+--------+
| 100254 | 2  | M1   |   0506 |
| 100254 | 2  | M2   |   0508 |
| 100254 | 2  | M3   |   0505 |
| 100254 | 2  | R1   |   0507 |
| 100254 | 2  | R2   |   0505 |
+--------+----+------+--------+
  [...] etc.

这是从出现在0506列中的100254-2-M1最大值46等得出的。

我一直在玩弄PIVOT功能,但那里没有成功。我也一直在寻找与Excel中类似的索引/匹配项,但是由于我无法将列标题引用为值,因此这显然行不通(并且也没有找到这种功能)。

任何帮助将不胜感激。


根据Damien的评论进行更新:

摘录自以下代码:

SELECT DISTINCT sub2.Number, sub2.LI, sub2.PHSE
, sum(sub2.[0505]) over (partition by sub2.Number, sub2.LI, sub2.PHSE) as '0505'
, sum(sub2.[0506]) over (partition by sub2.Number, sub2.LI, sub2.PHSE) as '0506'
[...] etc. /*64 rows*/

FROM
    (SELECT DISTINCT sub.*
    , CASE WHEN sub.MF > sub.[5PAV] - sub.[5PSTDEV] THEN 1 ELSE 0 END AS '0505'
    , CASE WHEN sub.MF > sub.[5PAV] - sub.[6PSTDEV] THEN 1 ELSE 0 END AS '0506'
    [...] etc. /*64 rows*/

    FROM
        (SELECT DISTINCT ra.*
        , sum(ra.qtyr) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 5 preceding AND 1 preceding) / 
        sum(ra.qtyu) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 5 preceding AND 1 preceding) AS '5PAV'
        , sum(ra.qtyr) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 6 preceding AND 1 preceding) / 
        sum(ra.qtyu) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 6 preceding AND 1 preceding) AS '6PAV'
        [...] etc. /*8 rows*/

        , stdev(ra.MF) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 4 preceding AND CURRENT row) AS '5PSTDEV'
        , stdev(ra.MF) OVER (partition BY ra.Number, ra.LI, ra.PHSE ORDER BY (ra.Number) rows BETWEEN 5 preceding AND CURRENT row) AS '6PSTDEV'
        [...] etc. /*8 rows*/

        FROM ra
        ) AS sub
    ) AS sub2

毫无疑问,这可能是SQL最无效的用法之一,但是时间压力和经验不足使我以这种方式编写它。

任何更改此代码并更有效地实现所需表结果的建议也将不胜感激。


根据安东的答案进行编辑;

上面的代码总结pvt如下。

SELECT Number, LI, PHSE, combo, hitrate

FROM (...) AS pvt
UNPIVOT 
(Hitrate FOR Combo IN (
                       [0505],
                       [0506],
                       [...] etc.)) AS upvt

很好的解决小问题的方法。

安东

您需要使用UNPIVOT,而不是PIVOT

https://msdn.microsoft.com/zh-CN/library/ms177410.aspx

如果列数是可变的,则必须使用动态sql来构造列列表

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mysql获取列名的最大值

来自分类Dev

熊猫idxmax()获取对应于行中最大值的列名

来自分类Dev

如何获取一行中的最大值以及列名

来自分类Dev

获取 X 行的最大值

来自分类Dev

获取具有最大值的行

来自分类Dev

如何获取数据成名python中最大值的列名?

来自分类Dev

返回行中3个最大值的列名称

来自分类Dev

大熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

选择具有最大值保存不同列的行

来自分类Dev

SQL Server中选择一行的最大值和最大值的列名作为两列

来自分类Dev

返回行标签以获取Excel R中的最大值

来自分类Dev

如何使用Python获取具有最大值的行?

来自分类Dev

pySpark-在滚动窗口中获取最大值行

来自分类Dev

查询PSCustomObject数组以获取具有最大值的行

来自分类Dev

使用行条件获取最大值列

来自分类Dev

从一组行中获取最大值

来自分类Dev

TSQL:获取具有最大值的列的行

来自分类Dev

获取列的最大值

来自分类Dev

从RichTextBox获取最大值

来自分类Dev

按行选择5个最大值,并输出这些值的列名

来自分类Dev

如何从DataFrame中获取具有最大值的列的列名

来自分类常见问题

查找具有每一行最大值的列名

来自分类Dev

子集数据框,以便包含每一行的最大值和列名

来自分类Dev

根据各列之间的比较,将最大值的列名称分配给行

来自分类Dev

如何使用apply()系列识别行中最大值的列名称

来自分类Dev

将行名列名和最大值的单元格存储在矩阵诊断中

来自分类Dev

Javascript保存循环变量的最大值

来自分类Dev

从字典中获取最大值

Related 相关文章

热门标签

归档