有没有办法运行快速虚拟SQL查询来测试聚合函数,像这样?

时间:2012-07-31 19:17:31

标签: sql-server-2008 ssms

我意识到这可能是一个非常新手的问题而且我完全错过了一些东西,但我想用MIN测试字符串(在MSSQL中):

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

但它告诉我:

  

消息174,级别15,状态1,行5 MIN函数需要1   参数(一个或多个)。

现在这对我来说很有意义,但如果可能,我想做那样的事情。

有没有办法做这样的事情,而不使用特定的表格?

3 个答案:

答案 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)