在select语句中包含另一个字段,该字段不能是distinct的一部分

时间:2016-06-08 07:48:15

标签: sql tsql

如何在select语句中包含另一列而不将其作为distinct的一部分?我试图在distinct之前设置另一个列名,但是没有用。

SELECT  distinct nm.LeadConsumerId, nm.LeadMetaInfoId         

  FROM [MyDatabase].[dbo].[LeadConsumer] as lc
  inner join [dbo].[LeadNMConsumer] as nm on lc.ID = nm.LeadConsumerId
  inner join [dbo].BrokerHistories as his on nm.LeadConsumerId = his.LeadConsumerId
  where (his.EventType = 0 Or his.EventType = 1) 
  AND his.EventDate >= Convert(datetime, '2016-05-01') AND his.EventDate <= Convert(datetime, '2016-05-31')

1 个答案:

答案 0 :(得分:0)

您可以使用ROW_NUMBER

WITH CTE AS(
    SELECT  
        nm.LeadConsumerId,
        nm.LeadMetaInfoId,
        -- other columns you want
        ROW_NUMBER()OVER (PARTITION BY nm.LeadConsumerId,   nm.LeadMetaInfoId ORDER BY (SELECT NULL))
    FROM [MyDatabase].[dbo].[LeadConsumer] AS lc
    INNER JOIN [dbo].[LeadNMConsumer] AS nm
        ON lc.ID = nm.LeadConsumerId
    INNER JOIN [dbo].BrokerHistories AS his
        ON nm.LeadConsumerId = his.LeadConsumerId
    WHERE
        (his.EventType = 0 OR his.EventType = 1)
        AND his.EventDate >= CONVERT(datetime, '2016-05-01')
        AND his.EventDate <= CONVERT(datetime, '2016-05-31')
)
SELECT
    --list all columns you want 
FROM CTE
WHERE rn = 1

(SELECT NULL)替换为ORDER BY子句作为首选。