MYSQL查询-交叉表?工会?参加选择?我应该找什么?

MYSQL查询-交叉表?工会?参加选择?我应该找什么?,mysql,Mysql,我不确定我到底应该找什么,所以我正在寻求帮助 我有两个表,通过查询我需要吐出一个。这两个表格如下: 交易: TransactionID SiteID EmployeeName 520 2 Michael 521 3 Gene TransactionResponse: TransactionID PromptMessage Response PromptID 520 Enter O

我不确定我到底应该找什么,所以我正在寻求帮助

我有两个表,通过查询我需要吐出一个。这两个表格如下:

交易:

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”的数字版本,因此如果方便的话,我可以查询它


我希望至少能找到一个好的查询方向。真正的额外学分工作的例子,甚至使用这个例子将是可怕的

对于预定义数量的可能的
prompid
值,您可以使用如下查询:

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
表达式,以便有条件地说明组中记录的子集。

对于预定义数量的可能
prompid
值,可以使用类似以下查询的方法:

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
表达式,以便有条件地说明组中记录的子集。

你太棒了!谢谢大家!@TonyC很高兴我能提供帮助并欢迎来到Stack Overflow。如果这有助于您解决问题,请将此答案或任何其他答案标记为已接受。我确实做了一些更改:我去掉了“AND t.SiteID=tr.SiteID”,因为我在每个答案中没有匹配的列。我也有其他我没有提到的专栏,并且添加了它们,但是出现了一个我显然不理解的错误,但是通过将所有的专栏添加到组中来修复它。你太棒了!谢谢大家!@TonyC很高兴我能提供帮助并欢迎来到Stack Overflow。如果这有助于您解决问题,请将此答案或任何其他答案标记为已接受。我确实做了一些更改:我去掉了“AND t.SiteID=tr.SiteID”,因为我在每个答案中没有匹配的列。我也有其他我没有提到的列,并且添加了它们,但是得到了一个我显然不理解的错误,但是通过将所有列添加到组中修复了它。