2017-05-11 33 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