Выберите MAX и MIN из нескольких столбцов

Я могу получить 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'.

Что это должно быть? Благодарю.

1 ответ

Похоже, вы можете легко написать это, используя CROSS APPLY с VALUES чтобы получить окончательный результат:

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 с демонстрацией. Это откроет пары столбцов, а затем вы можете просто взять max/min каждого столбца.

Другие вопросы по тегам