我是 SQL 新手,请多多指教。我可以通过查看数据库并将其导出到 Excel 来获取所有信息。一旦进入Excel,我就必须创建论坛才能按照我想要的方式获得它。如果可能的话,我想运行一个查询来查看全部内容。我在 Google 上搜索过,但似乎找不到对我有意义或为我指明正确方向的东西。
通过我的搜索,我认为会有某种连接,但对于 SQL 来说,我还是个新手,我捕获了救命稻草。
给出以下示例表:
门票表:
ID Queue Owner Subject Status TimeWorked LastUpdated
001 1 22 need help Open 20 2012-09-01
002 2 6 internet Resolved 60 2012-09-03
003 1 24 email not working Open 15 2012-09-04
用户表:
ID Name
6 Nobody
22 Josh
24 Jon
自定义字段值表:
Id ObjectId CustomField Content
01 001 1 Bob Inc
02 001 2 0
03 001 3 WaitingOnClient
04 001 4 Remote
05 002 1 ZYC Inc
06 002 2 15
07 002 3 WaitingOnClient
08 002 4 Remote
09 003 1 ACB Inc
10 003 2 0
11 003 3 TimeScheduled
12 003 4 OnSite
队列表:
ID Name
1 Support
2 Tier2
我需要做的是查询以获得如下所示的结果
ID Client Subject Queue Owner Status Type BTime CustomStat LastUpdate NT
001 Bob Inc need help support Josh open Remote 20 WaitingOnClient 2012-09-01 0
001 ZYC Inc internet Tier2 Nobody Resolved Remote 60 WaitingOnClient 2012-09-01 15
001 ACB Inc email support Jon open onsite 15 TimeScheduled 2012-09-01 0
任何帮助将不胜感激。
提前致谢
最佳答案
您需要为此使用内联 CASE
语句,GROUP_CONCAT
并且应按ID
分组。尝试一下。
SELECT a.ID,
GROUP_CONCAT((CASE WHEN d.CustomeField = 1 THEN d.content ELSE NULL END)) `Client`,
a.Subject,
c.Name,
b.Name Owner,
a.`Status`,
GROUP_CONCAT((CASE WHEN d.CustomeField = 4 THEN d.content ELSE NULL END)) `Type`,
a.TimeWorked,
GROUP_CONCAT((CASE WHEN d.CustomeField = 3 THEN d.content ELSE NULL END)) `CustomStat`,
a.LastUpdated,
GROUP_CONCAT((CASE WHEN d.CustomeField = 2 THEN d.content ELSE NULL END)) `NT`
FROM tickets a
INNER JOIN users b
ON a.owner = b.id
INNER JOIN queue c
ON a.queue = c.id
INNER JOIN CustomFieldValue d
ON a.ID = d.ObjectID
GROUP BY a.ID
SQLFiddle Demo
关于MySql 查询多个表的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379835/