我目前正在處理一個查詢,我需要提取項目列表,以及它們輸入系統的日期以及輸入項目的人員的姓名和用戶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