【问题标题】:MySql Query Data from multiple tables [closed]MySql从多个表中查询数据[关闭]
【发布时间】:2012-09-12 00:46:03
【问题描述】:

我是 SQL 新手,所以请善待。我可以通过查看数据库并将其导出到 Excel 来获取所有信息。一旦进入excel,我必须创建forumlas才能按照我想要的方式获得它。如果可能的话,我只想运行一个查询来查看所有内容。我用 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

任何帮助将不胜感激。

提前致谢

【问题讨论】:

  • 所有客户都是Bob Inc? queue 的值是从哪里来的?
  • 很抱歉我已经更新了它。客户端名称应来自 CustomFieldValue 表。有 4 个 CustomFieldValues 1 到 4。值 1 是公司名称。值 2 是我们没有就此问题向客户收费的分钟数。值 3 是详细状态,值 4 是服务类型。
  • 好的,我知道了,在下面查看我的答案:D

标签: mysql sql report reporting


【解决方案1】:

为此,您需要使用 inline 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

【讨论】:

  • 为什么选择 GROUP_CONCAT?如果您希望单个工单中的自定义字段有多个值,我可以看到这一点?
  • @JimGarrison 因为GROUP_CONCAT 排除空值see this link。当你点击上面的小提琴时,试试removing GROUP_CONCAT 看看会发生什么。
  • 感谢您的帮助。是否可以仅列出客户名称为“bob inc”的票证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
相关资源
最近更新 更多