2

以下のような TestValue という名前のテーブルがあります

value1  value2  value3
10      19      17
78      8       91

最大値を取得したい。私はSQLでこのクエリを試しました:

select (select MAX(v) from (values (Value1),(Value2),(Value3)) as value(v)) 
      as Maxvalue 
      from TestValue

それは次のようになります

Maxvalue
19
91

しかし、私は結果が唯一であることを望みます91

4

5 に答える 5

1

MS SQL Serverには関数がありませんが、次のステートメントGREATESTでシミュレートできます。CASE

SELECT MAX(
    CASE
        WHEN value1 > value2 And value1 > value3 THEN value1
        WHEN value2 > value3 THEN value2
        ELSE value3
    END) AS Maxvalue FROM TestValue
于 2013-01-07T08:42:44.903 に答える
1

のソリューションgreatestは良いですが、それはdb固有のソリューションに依存しているため(たとえば、SQL Serverで私が知っている限り、のようなものはありませんgreatest)、一般的なものを使用できます:

SELECT MAX(v) FROM
(
  SELECT value1 v FROM tab
  UNION ALL
  SELECT value2 v FROM tab
  UNION ALL
  SELECT value3 v FROM tab
)
于 2013-01-07T08:41:56.107 に答える
0

これは機能します(SQLFiddle):

SELECT max(greatest(value1, value2, value3))
FROM testvalue

編集: greatest()すべての一般的なサーバー (MySQL、PostgreSQL、Oracle) でサポートされていますが、MSSQL ではサポートされていません。MSSQL では、ストアド プロシージャを作成してこの関数をシミュレートするのが一般的です。

于 2013-01-07T08:33:40.460 に答える
0

SQL フィドル

MS SQL Server 2012 スキーマのセットアップ:

create table TestValue
(
  value1 int,
  value2 int,
  value3 int
);

insert into TestValue values(10,      19,      17);
insert into TestValue values(78,      8 ,      91);

クエリ 1 :

select max(MaxValue) as MaxValue
from
(
  select (select MAX(v) from (values (Value1),(Value2),(Value3)) as value(v)) 
        as Maxvalue 
        from TestValue
) as T

結果

| MAXVALUE |
------------
|       91 |

クエリ 2 :

select max(Value) as MaxValue
from TestValue 
unpivot (Value for Col in (Value1, Value2, Value3)) as U

結果

| MAXVALUE |
------------
|       91 |
于 2013-01-07T08:45:01.347 に答える
0
select max(max(Value1),max(Value2),max(Value3)) from Persons

ここでテスト

于 2013-01-07T09:02:33.570 に答える