2

これは本当に初心者の質問である可能性があり、何かが完全に欠けていることを認識してMINいますが、文字列を使用してテストしたいと思います(MSSQLで):

MIN('d3d742ce-f12e-4402-9a0e-8a05066f6bed',
'03f8d7a7-9feb-4375-b7ff-04c187d46009',
'1c180a55-ce67-4ab4-afe5-9d9907ed1c21' )

しかし、それは私に言います:

メッセージ 174、レベル 15、状態 1、行 5 MIN 関数には 1 つの引数が必要です。

それは今の私には理にかなっていますが、可能であればそのようなことをしたいと思っています。

特定のテーブルを使用せずに、このようなことを行う方法はありますか?

4

3 に答える 3

4

テーブル変数を使用するだけではどうですか

DECLARE @TABLE Table (str varchar(100))
INSERT @TABLE (str) VALUES ('d3d742ce-f12e-4402-9a0e-8a05066f6bed')
INSERT @TABLE (str) VALUES ('03f8d7a7-9feb-4375-b7ff-04c187d46009')
INSERT @TABLE (str) VALUES ('1c180a55-ce67-4ab4-afe5-9d9907ed1c21')

SELECT MIN(str) FROM @TABLE
于 2012-07-31T19:28:09.513 に答える
2

それだけです:(SQLServer 2008以降で動作します)

SELECT min(id) 
FROM (
VALUES 
('d3d742ce-f12e-4402-9a0e-8a05066f6bed'),
('03f8d7a7-9feb-4375-b7ff-04c187d46009'),
('1c180a55-ce67-4ab4-afe5-9d9907ed1c21')) AS guids(id)
于 2012-07-31T19:43:06.683 に答える
2

ユニオンを使用して、いつでもその場で独自の派生テーブルを作成できます。

select min(MyCol)
from (
    select 'd3d742ce-f12e-4402-9a0e-8a05066f6bed' as MyCol
    union all select '03f8d7a7-9feb-4375-b7ff-04c187d46009'
    union all select '1c180a55-ce67-4ab4-afe5-9d9907ed1c21'
) as MyDerivedTable

テストデータがすべて一意であることがわかっている場合は高速になるため、この場合に使用union allしています( のように明確に実行されることはありませんunion)。

これと同じ手法をCommon Table Expression (CTE)で使用できます。

;with CTE as (
    select 'd3d742ce-f12e-4402-9a0e-8a05066f6bed' as MyCol
    union all select '03f8d7a7-9feb-4375-b7ff-04c187d46009'
    union all select '1c180a55-ce67-4ab4-afe5-9d9907ed1c21'
)
select min(MyCol)
from CTE

前のステートメントをセミコロンで終了しないと SQL Server がエラーを出すため、ステートメントをセミコロンで始めました。

ただし、回避策に頼る前にクエリで 256 個のテーブルしか使用できないため、これはある程度しか機能しません。

于 2012-07-31T19:36:23.747 に答える