2016-02-25 71 views
1

不知道我應該在尋找什麼,所以我正在尋求幫助。MYSQL查詢 - 交叉表?聯盟?加入?選擇?我應該尋找什麼?

我有兩個表,通過查詢我需要吐出一個。這兩個表如下:

交易:

TransactionID SiteID EmployeeName 
520    2  Michael 
521    3  Gene 

TransactionResponse:

TransactionID PromptMessage Response PromptID 
520    Enter Odometer  4500  14 
520    Enter Vehicle ID 345  13 
521    Enter Odometer  5427  14 
521    Enter Vehicle ID 346  13 

但我需要的是下面,讓我們把它TransactionSummary:

TransactionID SiteID EmployeeName 'Odometer' 'VehicleID' 
520    2  Michael   4500   345 
521    3  Gene   5427   346 

的「PromptID」列是「PromptMessage」的數字版本,所以我可以查詢,如果我t比較容易。

這個查詢會被調用的好方向是我所希望的最少的。對於工作示例或者甚至使用這個提供的示例,真正的額外功勞將非常棒!

回答

4

對於可能PromptID值的預定數量,你可以使用類似下面的查詢:

SELECT t.TransactionID, t.SiteID, t.EmployeeName, 
     MAX(CASE WHEN PromptID = 13 THEN Response END) AS 'VehicleID', 
     MAX(CASE WHEN PromptID = 14 THEN Response END) AS 'Odometer' 
FROM Transactions AS t 
LEFT JOIN TransactionResponse AS tr 
    ON t.TransactionID = tr.TransactionID AND t.SiteID = tr.SiteID 
GROUP BY t.TransactionID, t.SiteID, t.EmployeeName 

上面的查詢採用的是所謂條件聚集:一個CASE表達是一個聚合函數中使用,以有條件地說明組內記錄的子集。

+0

你真了不起!謝謝! –

+0

@TonyC很高興我能夠幫助並歡迎Stack Overflow。如果它幫助你解決你的問題,請將它標記爲或接受任何其他答案。 –

+0

我確實改變了一些東西:我拿出了「AND t.SiteID = tr.SiteID」,因爲我沒有匹配每列的列。我也有其他專欄,我沒有提及,並添加他們,但有一個錯誤,顯然我不明白,但將所有列添加到GROUP BY修復它。 –