2

我是 SQL 新手,所以请善待。我可以通过查看数据库并将其导出到 Excel 来获取所有信息。一旦进入excel,我必须创建forumlas才能按照我想要的方式获得它。如果可能的话,我只想运行一个查询来查看所有内容。我用谷歌搜索过,但似乎找不到对我有意义或指向正确方向的东西。

我会认为通过我的搜索会有某种形式的连接,但再次成为 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

任何帮助将非常感激。

提前致谢

4

1 回答 1

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 演示

于 2012-09-12T02:55:48.907 回答