2017-05-11 34 views
0

此查询工作完全在MySQL,但我应该重写与MSSQL工作,这是行不通MSSQL DISTINCT再次

SELECT DISTINCT TOP 20 [UF].[id], [UF].[created], [Company].[name] 
FROM [user_functions] AS [UF] 
LEFT JOIN [companies] AS [Company] ON ([Company].[code] = [UF].[company_code]) 
WHERE [UF].[user_id] = 8923 AND [UF].[state] != 500 
ORDER BY [UF].[created] DESC 

该查询返回重复的行,即使我设置DISTINCT

但是,当从SELECT删除[Company].[name]它是正确返回。
我想使用[Company][UF]表中的很多字段。

+1

删除MySQL的标签,因为MySQL不支持TOP语法......下次请标记正确的标签(一个或多个) –

+3

你应该提供范例包含数据和预期输出的表格 –

+1

它必须为'[Company]返回略微不同的值。[name]' –

回答

0

你可以尝试ROW_NUMBER,并得到如下的第一ROWNUM:

select * from 
(
    SELECT DISTINCT TOP 20 [UF].[id], [UF].[created], [Company].[name], 
    RowNum = row_number() over(partition by [Company].[name] order by [UF].[ID]) 
    FROM [user_functions] AS [UF] 
    LEFT JOIN [companies] AS [Company] ON ([Company].[code] = [UF].[company_code]) 
    WHERE [UF].[user_id] = 8923 AND [UF].[state] != 500 
) a where RowNum = 1 
order by a.Created Desc