SELECT MyID, MAX(GreatestVal)
FROM figures
UNPIVOT (
GreatestVal
FOR MyID
IN (col_1, col_2, col_3,...)
);
Oracleのクエリが原因でテストされていないソリューションを好みます unpivotの詳細はlocated hereで、SQL Serverのunpivotと同じことをしています。 (。誰かが私を打つ場合を除き;-))
MySQLの 私は、MySQLでこれを行う方法がわからないんだけど、私は機会を持つよう検討すること
次のSQL Serverの答えです:
すべての場合にすべての入力パラメータが必須であるため、UDFで行うのはきれいではありません。ストアドプロシージャとして実装することができれば、入力パラメータのデフォルト値を指定し、動的な列数で呼び出すことができます。いずれにしても、入力パラメータの最大数を決める必要があります。ここではSQL Server上のUDFの例です:
SELECT dbo.GREATESTof3(col_1, col_2, col_3)
FROM figures;
CREATE FUNCTION GREATESTof3(@col_1 sql_variant = null, @col_2 sql_variant = null, @col_3 sql_variant = null)
RETURNS sql_variant
AS
BEGIN
DECLARE @GreatestVal sql_variant
DECLARE @ColumnVals TABLE (Candidate sql_variant)
INSERT INTO @ColumnVals
SELECT @col_1
UNION ALL
SELECT @col_2
UNION ALL
SELECT @col_3
SELECT @GreatestVal = MAX(Candidate)
FROM @ColumnVals
RETURN @GreatestVal
END
これは、入力パラメータの数の各バリアントのための新しいUDFを必要以上の数を取ることができるものを作成が、その後UDFあなたへの呼び出しになり未使用の各パラメータ(null)にいくつかの値を指定するか、デフォルトを指定する必要があります。
代替:
これはあなたの全体のテーブルから3つのカラムの最大値を与えると列の動的な数を持つことが容易になるだろう:
SELECT MAX([Value]) AS Greatest
FROM figures
UNPIVOT
(
[Value]
FOR ColumnName IN ([Col_1], [Col_2], [Col_3])
) AS unpvt
はあなたには、いくつかのROWIDを持っていると仮定すると、または出力に必要な別の列を指定して、各行の指定された列から最大の値を得ることができます。
SELECT RowID, MAX([Value]) AS Greatest
FROM figures
UNPIVOT
(
[Value]
FOR ColumnName IN ([Col_1], [Col_2], [Col_3])
) AS unpvt
GROUP BY RowID
は、これは同じです* from、x desc/ascの順 最大値は最初/最後でなければなりませんか? XSLTでも、最大値を得るためにソートするだけですか? – Mike
おそらくあなたはSQL Serverを意味しています - それ以上の資格を持たないSQLは言語を指し、様々な製品によって様々な程度に実装され、それぞれ独自の固有の拡張もあります。 –
これは、 'case'ステートメントのスケーラビリティを向上させる方法の1つです。 http://stackoverflow.com/questions/7995945/how-to-i-modify-this-t-sql-query-to-return-the-maximum-value-for-different-colum/7996068#7996068 –