MySql 查询多个表的数据

标签 mysql sql report reporting

我是 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/

相关文章:

mysql - 为什么我的查询不使用日期时间字段上的索引?

java - 当从 imageservlet 提供多个 blob 图像时,Glassfish 挂起

mysql - 从 3 个表中选择具有连接的数据

reporting-services - 无论如何每天都要更改电子邮件订阅的正文?

mysql - 序列化 findAll,其中列值与表中至少一项其他项目相同

mysql - 根据字符获取sql语句中字符串的一部分

mysql - 如何在忽略空值的情况下对行进行分组?

sql - 将 SQL 文件上传到 GitHub 存储库

c# - 如何在报表中使用表单控件属性?

c# - 如何使用 PrintDocument 在热敏打印机上打印文本文件?