Session 具有3个表和2个和组的内部联接

Session 具有3个表和2个和组的内部联接,session,Session,我有三张桌子;公司、培训票和考试 公司表: 培训票表: 测试会话表: 我需要这样的东西: C. CODE | COMPANY NAME | 1ST START DATE | TRAINING TICKET TOTAL | CERTIFIED TOTAL 192 ABC ENTERPRISE 2015-02-02 2 1 299 XYZ ENTERPRISE 2015-03-02 1

我有三张桌子;公司、培训票和考试

公司表:

培训票表:

测试会话表:

我需要这样的东西:

 C. CODE | COMPANY NAME | 1ST START DATE | TRAINING TICKET TOTAL | CERTIFIED TOTAL
 192      ABC ENTERPRISE  2015-02-02             2                1
 299      XYZ ENTERPRISE  2015-03-02             1                1 
有可能吗

我的Sql指令是:

Select *, count(TICKET.CCODE) AS TICKET_TOTAL, count(TEST.CODE) AS CERT_TOTAL
from TICKET 
Inner Join COMPANY on TICKET.CCODE = COMPANY.CCODE 
Inner Join TEST on COMPANY.CCODE = TEST.CCODE 
Group by (TICKET.CCODE),(TEST.CCODE)
Order by TICKET_TOTAL DESC
但对于TICKET_TOTAL和CERT_TOTAL,这两个计数总是等于相同的结果,并且总和是错误的——结果是TICKET_TOTAL=21,CERT_TOTAL=28,但我得到523——排名第一的公司。

我得到了答案:

Select COMPANY.CODE, COMPANY.NAME, 
MIN(TICKET.STARTDATE), count(TICKET.TICKETID) AS TICKET_TOTAL, 
count(TEST.CERTIFIED) AS CERT_TOTAL
    from COMPANY
    INNER JOIN TICKET ON COMPANY.CODE = TICKET.CCODE 
    LEFT JOIN TEST ON TICKET.TICKETID = TEST.TICKET
    Group by (TICKET.CCODE)
    ORDER BY TICKET_TOTAL DESC 
1-从公司表中重新排序和星型指示

2-MINTICKET.STARTDATE获取第一个开始日期,必要时使用MAX获取最后一个开始日期

3-将内部联接更改为左联接,因为有些公司在票证表上有票证,但在测试表上没有测试


希望这能对以后的人有所帮助

普遍接受的做法是展示你迄今为止所做的努力,展示你在这个问题上付出了一些努力。@Coshman对我来说最大的问题是第二组和。我简化了表格,但一家公司的第一笔金额是28,第二笔金额是21。我能做的第一个和没有问题3个内部连接+1个组和-第二个组我得到了一些疯狂的结果,比如523。。这两个数字总是相等的。选择*,countTICKET.CCODE作为票证总数,countTEST.CODE作为来自票证上的票证内部加入公司的证书总数。CCODE=COMPANY.CCODE内部加入公司测试。CCODE=TEST.CCODE按票证分组。CCODE,TEST.CCODE按票证排序\u TOTAL DESC
 C. CODE | COMPANY NAME | 1ST START DATE | TRAINING TICKET TOTAL | CERTIFIED TOTAL
 192      ABC ENTERPRISE  2015-02-02             2                1
 299      XYZ ENTERPRISE  2015-03-02             1                1 
Select *, count(TICKET.CCODE) AS TICKET_TOTAL, count(TEST.CODE) AS CERT_TOTAL
from TICKET 
Inner Join COMPANY on TICKET.CCODE = COMPANY.CCODE 
Inner Join TEST on COMPANY.CCODE = TEST.CCODE 
Group by (TICKET.CCODE),(TEST.CCODE)
Order by TICKET_TOTAL DESC
Select COMPANY.CODE, COMPANY.NAME, 
MIN(TICKET.STARTDATE), count(TICKET.TICKETID) AS TICKET_TOTAL, 
count(TEST.CERTIFIED) AS CERT_TOTAL
    from COMPANY
    INNER JOIN TICKET ON COMPANY.CODE = TICKET.CCODE 
    LEFT JOIN TEST ON TICKET.TICKETID = TEST.TICKET
    Group by (TICKET.CCODE)
    ORDER BY TICKET_TOTAL DESC