SQL 服务器 - 自加入

SQL Server - Self-Join

SQL 服务器:我需要生成一份具有预期结果的报告,如下所述。

我想我需要使用自连接来检索预期格式的数据。我已经遍历了所有自连接示例,但仍然无法找到适合我的问题的查询,因此想在这里提出问题。

我有三个这样的 table:

客户

ID  CUSTOMERNAME  PRODUCTINFO   AGENTNUM   TRANSID
1     Cust1         Mobile       1234       0001
2     Cust2         Laptop       1234       0002
3     Cust3         Camera       2345       0003 

代理

ID  AGENTNAME  AGENTNUMBER
1    John       1234
2    Smith      2345
3    Will       3456

审计日志

ID    TRANSID      TYPE         LOGDATA        LOGTIME
1      0001       InquiryI     Input data      10/02/2016 18:20:10
2      0001       InquiryO     Output data     10/02/2016 18:20:35
3      0002       CreateI      Input data      11/02/2015 10:03:50
4      0002       CreateO      Output data     11/02/2016 10:04:10
5      0003       InquiryI     Input data      15/02/2016 21:44:02

预期输出

TRANSID  CUSTNAME   PRODUCTINFO  AGENTNAME    TYPE     INPUTLOGTIME          INPUT    OUTPUT
0001      Cust1       Mobile      John       Inquiry   10/02/2016 18:20:10   data     data
0002      Cust2       Laptop      John       Create    11/02/2015 10:03:50   data     data
0003      Cust3       Camera      Smith      Inquiry   15/02/2016 21:44:02   data

我想我们需要使用 AgentCustomer table 的内部连接以及 AuditLog table 之间的自连接,但它不是按预期工作。

请帮忙。

您可以使用以下查询:

SELECT c.TRANSID, CUSTOMERNAME, PRODUCTINFO, AGENTNAME,
       LEFT(al.TYPE, LEN(al.TYPE) - 1) AS TYPE,
       MAX(CASE WHEN RIGHT(al.TYPE, 1) = 'I' THEN LOGDATA END) AS INPUT,
       MAX(CASE WHEN RIGHT(al.TYPE, 1) = 'O' THEN LOGDATA END) AS OUTPUT,
       MIN(CASE WHEN RIGHT(al.TYPE, 1) = 'I' THEN LOGTIME END) AS INPUTLOGTIME
FROM Customer AS c
INNER JOIN Agent AS a ON c.AGENTNUM = a.AGENTNUMBER
LEFT JOIN AuditLog AS al ON c.TRANSID = al.TRANSID
GROUP BY c.TRANSID, CUSTOMERNAME, PRODUCTINFO, AGENTNAME,
         LEFT(al.TYPE, LEN(al.TYPE) - 1)