【问题标题】:Select MAX and MIN from multiple columns从多列中选择 MAX 和 MIN
【发布时间】:2014-06-09 13:40:15
【问题描述】:

我可以通过以下方式从同一个表的多个列中获取MAX()MIN()

Select
    max(Maximo) as Maximo,
    min(Minimo) as Minimo
From(
    SELECT
        MAX(COLUMN1) AS Maximo,
        MIN(COLUMN2) AS Minimo
    FROM TABLE1
    WHERE
        COND1= 'A' and
        COND2= 'X'
    UNION
    SELECT
        MAX(COLUMN3) AS Maximo,
        MIN(COLUMN4) AS Minimo
    FROM TABLE1
    WHERE
        COND1= 'A' and
        COND2= 'X'
    UNION
    SELECT
        MAX(COLUMN5) AS Maximo,
        MIN(COLUMN6) AS Minimo
    FROM TABLE1
    WHERE
        COND1= 'A' and
        COND2= 'X'
    UNION
    SELECT
        MAX(COLUMN7) AS Maximo,
        MIN(COLUMN8) AS Minimo
    FROM TABLE1
    WHERE
        COND1= 'A' and
        COND2= 'X'
) x

但这看起来很难看。所以我尝试使用UNPIVOT:

SELECT
    MIN (v) AS MinValue,
    MAX (v) AS MaxValue
FROM
    TABLE1 UNPIVOT (
        v FOR nValue IN (
            COLUMN1,
            COLUMN2,
            COLUMN3,
            COLUMN4,
            COLUMN5,
            COLUMN6,
            COLUMN7,
            COLUMN8
        )
    ) AS U

我收到以下错误:

[Err] 42000 - [SQL Server]Incorrect syntax near the keyword 'FOR'.

应该是什么?谢谢。

【问题讨论】:

  • 您的查询运行良好:检查此SQL Fiddle
  • 感谢您抽出宝贵时间@TechGirl。是的,我测试了日期(我的情况)并且它仍然有效(sqlfiddle.com/#!3/18acc/1),但在我的应用程序中它给出了一个错误。嗯,会做更多的测试。谢谢
  • 重新设计您的桌子是否为时已晚?规范化它会解决你的问题。
  • @DMason,该表已标准化。我只想得到一个具体的信息。谢谢。

标签: sql sql-server-2008-r2 unpivot


【解决方案1】:

似乎您可以使用CROSS APPLYVALUES 轻松编写此代码以获得最终结果:

SELECT Maximo = max(maxVal), 
  Minimo = min(minVal)
FROM table1 t
CROSS APPLY
(
  VALUES
    (COLUMN1, COLUMN2),
    (COLUMN3, COLUMN4),
    (COLUMN5, COLUMN6),
    (COLUMN7, COLUMN8)
) c (maxVal, minVal)
WHERE t.COND1= 'A'
  AND t.COND2= 'X';

SQL Fiddle with Demo。这将取消对列的旋转,然后您只需获取每列的 max/min

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多