我意识到这可能是一个非常新手的问题而且我完全错过了一些东西,但我想用MIN
测试字符串(在MSSQL中):
MIN('d3d742ce-f12e-4402-9a0e-8a05066f6bed',
'03f8d7a7-9feb-4375-b7ff-04c187d46009',
'1c180a55-ce67-4ab4-afe5-9d9907ed1c21' )
但它告诉我:
消息174,级别15,状态1,行5 MIN函数需要1 参数(一个或多个)。
现在这对我来说很有意义,但如果可能,我想做那样的事情。
有没有办法做这样的事情,而不使用特定的表格?
答案 0 :(得分: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
答案 1 :(得分: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会抱怨。
但这只适用于某一点,因为在查询workarounds之前,您只能在查询中使用256个表。
答案 2 :(得分:2)
就是这样:(从SQL Server 2008开始工作)
SELECT min(id)
FROM (
VALUES
('d3d742ce-f12e-4402-9a0e-8a05066f6bed'),
('03f8d7a7-9feb-4375-b7ff-04c187d46009'),
('1c180a55-ce67-4ab4-afe5-9d9907ed1c21')) AS guids(id)