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”,因为我在每个答案中没有匹配的列。我也有其他我没有提到的列,并且添加了它们,但是得到了一个我显然不理解的错误,但是通过将所有列添加到组中修复了它。