查询:
SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job
FROM [Equipment List] LEFT JOIN [Job Assignments]
ON [Equipment List].ID = [Job Assignments].EquipmentID;
在此查询中,当且仅当我没有在select语句中添加[Job Assignments] .Job时,设备ID才是不同的。我一做到这一点就得到了很多重复。作业分配表有很多作业,但我只对[返回日期]空白或空的作业感兴趣。任何想法如何实现这一目标?我使用它作为报告,所以当我尝试使用内部SQL查询时,它给了我一个错误。这也是一个简化的查询,因为原始有多个选择。我究竟做错了什么?任何帮助将不胜感激。
更新:我希望从[作业分配]表中只选择一行。有什么想法吗?
答案 0 :(得分:3)
DISTINCT返回SELECT语句中所有列的不同组合,这就是为什么引入第二列也会引入dupes。
听起来你可以使用WHERE子句:
SELECT DISTINCT ([Equipment List].ID) AS Expr1, [Job Assignments].Job
FROM [Equipment List]
LEFT JOIN [Job Assignments] ON [Equipment List].ID = [Job Assignments].EquipmentID
WHERE [Job Assignments].[Date Returned] IS NULL
你不能有一个“空白”日期,所以如果你看到空白,那么你很可能没有使用日期时间类型来存储你的日期 - 在这种情况下,你需要说:
WHERE COALESCE([Job Assignments].[Date Returned], '') = ''
编辑:基于以下评论的最新解决方案:
;WITH LatestJobs
AS
(SELECT ja.EquipmentID, ja.Job,
ROW_NUMBER() OVER ( PARTITION BY EquipmentID
ORDER BY [Date Returned] DESC) AS RowNumber
FROM [Job Assignments] AS ja)
SELECT el.ID AS EquipmentID,
lj.Job
FROM [Equipment List] AS el
LEFT JOIN LatestJobs AS lj ON el.ID = lj.EquipmentID
AND lj.RowNumber = 1
答案 1 :(得分:0)
select上每个字段的数据类型是什么?如果是longchar(sql)或memo(在访问中),你将无法使用distinct函数。