2015-12-10 217 views
0

我目前正在處理一個查詢,我需要提取項目列表,以及它們輸入系統的日期以及輸入項目的人員的姓名和用戶ID。SQL:在一個查詢中選擇相同的列兩次?

Items表包含列CreateDateCreatedBy(這是人的用戶ID),LastChanged(這是一個日期),並LastChangedBy(也有用戶ID,是因爲誰進入該項目的人並不總是創造它的同一個人)。

我已將Items表與用戶表連接起來,這樣我就可以拉出與CreatedByLastChangedBy用戶標識匹配的用戶的名字和姓氏。我現在已經查詢了這個查詢的方式,我將這兩個字段連接在一起,以便在單個列中顯示爲「姓氏,名字」。我也想只爲某個用戶提供結果,而這個用戶只需要成爲最後一個更改項目的人 - 無論他們是否創建它都沒關係。

我的查詢看起來是這樣的:

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; 

我的問題是,雖然,因爲我有完全相同的一段代碼來拉用戶的名字兩次,它拉動的同名無論用戶CreatedByLastChangedBy列中的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相對應?

回答

3

我認爲你缺少你查詢join

SELECT i.ItemName, i.CreateDate, 
     (uc.LastName + ', ' + uc.FirstName) as [Created By Name], 
     i.CreatedBy, i.LastChanged, 
     (ucb.LastName + ', ' + ucb.FirstName) as [Last Changed By Name], 
     i.LastChangedBy 
FROM Items i LEFT JOIN 
    Users uc 
    ON i.CreatedBy = uc.UserID LEFT JOIN 
    Users ucb 
    ON i.LastChangedBy = ucb.UserId 
WHERE i.LastChangedBy = 0001; 

你需要參加兩次獲得兩個用戶。

+0

啊,完美!那就是訣竅。 – EJF

相關問題