我目前正在处理一个查询,我需要提取项目列表,以及它们输入系统的日期以及输入项目的人员的姓名和用户ID。SQL:在一个查询中选择相同的列两次?
我Items
表包含列CreateDate
,CreatedBy
(这是人的用户ID),LastChanged
(这是一个日期),并LastChangedBy
(也有用户ID,是因为谁进入该项目的人并不总是创造它的同一个人)。
我已将Items表与用户表连接起来,这样我就可以拉出与CreatedBy
和LastChangedBy
用户标识匹配的用户的名字和姓氏。我现在已经查询了这个查询的方式,我将这两个字段连接在一起,以便在单个列中显示为“姓氏,名字”。我也想只为某个用户提供结果,而这个用户只需要成为最后一个更改项目的人 - 无论他们是否创建它都没关系。
我的查询看起来是这样的:
SELECT
i.ItemName, i.CreateDate,
(u.LastName + ', ' + u.FirstName) as [Created By Name],
i.CreatedBy, i.LastChanged,
(u.LastName + ', ' + u.FirstName) as [Last Changed By Name],
i.LastChangedBy
FROM
Items i
JOIN
Users u ON i.CreatedBy = u.UserID
WHERE
i.LastChangedBy = 0001;
我的问题是,虽然,因为我有完全相同的一段代码来拉用户的名字两次,它拉动的同名无论用户CreatedBy
和LastChangedBy
列中的ID不同。所以,我最终的结果是这样的:
ItemName CreateDate Created By Name CreatedBy LastChanged Last Changed By Name LastChangedBy
Item A 12/01/2015 Smith, John 0001 12/03/2015 Smith, John 0001
Item B 12/02/2015 Smith, John 0001 12/04/2015 Smith, John 0001
Item C 12/02/2015 Doe, Jane 1002 12/05/2015 Doe, Jane 0001
所以即使约翰·史密斯是最后一个人改变项目C,它仍然存在显示Jane Doe的名字,因为(我认为)的代码串显示用户的名字在两个实例中都是相同的,并且只是两次拉同名。
是否有办法在同一个查询中两次从用户表中拉取姓氏和名字,但要确保它们与正确的用户ID相对应?
啊,完美!那就是诀窍。 – EJF