2012-09-12 533 views
2

我是SQL新手,请亲切。我可以通过查看数据库并将其导出为ex​​cel来获取所有信息。一旦进入excel,我必须创建forumlas才能完成我想要的任务。如果可能的话,我想只是运行一个查询来查看这一切。我已经Google了,但我似乎无法找到对我来说有意义或者指向正确方向的东西。MySql从多个表中查询数据

我想我的搜索,会有某种形式的加入,但又是SQL的新手我正在抓秸秆。

鉴于下面的示例表:

门票表:

用户表:

ID Name 
6  Nobody 
22 Josh 
24 Jon 

CustomFieldValue表:

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 

任何帮助将非常感激。

在此先感谢

+0

怎么所有的客户都是'鲍勃INC'?队列的值来自哪里? –

+0

对不起,我已经更新了它。客户端名称应该来自CustomFieldValue表。有4个CustomFieldValues 1至4.值1是公司名称。值2是我们在此问题上没有向客户收费的分钟数。值3是详细状态,值4是服务的类型。 – JRH

+0

好吧,我明白了,检查我的答案如下:D –

回答

2

您需要使用直列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

+0

为什么GROUP_CONCAT?如果您希望单个票证中的自定义字段有多个值,我可以看到这一点? –

+0

@JimGarrison,因为'GROUP_CONCAT' *排除空值*。 [看这个链接](http://sqlfiddle.com/#!2/cf7db/1)。当你点击上面的小提琴时,尝试[删除'GROUP_CONCAT'](http://sqlfiddle.com/#!2/f7809/14),看看会发生什么。 –

+0

感谢您的帮助。是否有可能只列出客户名称是'bob inc'的票。 – JRH