SQL Outer Join显示没有数据的行

时间:2017-04-07 15:13:04

标签: sql sql-server

需要一些帮助来获取一些数据并且我陷入了连接沼泽。我在MS SQL Server上运行。

我在一个表(客户端组)中有一个客户端列表

clientgroup
Groupid | clientid
1       | 11
1       | 12
1       | 13
1       | 14
1       | 15

如果clientid有一些客户活动,我还有另一张桌子

clientcontactlog
Logid | clientid
1     | 11
2     | 14
3     | 15
4     | 11
5     | 11
6     | 11

然后我有另一个表格,其中包含有关clientactivity的信息

contactlog
Logid | logtype | logdate      | logtext
1     | 1       | ’2016-05-16’ | ’Toys’
2     | 1       | ’2016-05-16’ | ’Toys’
3     | 1       | ’2016-05-16’ | ’Toys’
4     | 2       | ’2016-05-17’ | ’Lunch’
5     | 2       | ’2016-05-18’ | ’Dinner on Mars’
6     | 1       ! ’2016-05-19’ | ’Dinner on Mars’

我现在想做一个关于这个的mothly统计(在contactlog中的logtypes总结)并包括我在我的客户端列表中具有id的所有客户端。因此输出还显示没有记录clientcontactlog的客户端。这是我需要帮助的..我得到了我们输入的所有数据,但我还需要在没有记录的客户端上显示0。

输出应为

Clientname | sum(logtype1)
Client11   | 2
Client12   | 0
Client13   | 0
Client14   | 1
Client15   | 1

感谢您提供意见和帮助

2 个答案:

答案 0 :(得分:0)

很确定你的意思是COUNT(LogType),而不是SUM(LogType),因为总结一个日期没有任何意义。无论如何,这可以做你想要的。

SELECT ClientName, IsNull(ct, 0) as LogCount
FROM clientgroup cg
INNER JOIN Clients c
    ON cg.clientid = c.clientid
LEFT JOIN (
    SELECT LogID, 
        Count(*) as ct
    FROM ClientContactLog
    GROUP BY ClientID
    ) as cl

注意:

  • 我假设一个包含客户端名称的Clients表。
  • 我没有查看contactlog表,因为不需要提供您要求的内容。

答案 1 :(得分:0)

假设clientname列中有一个select t2.clientname, coalesce(count(distinct t4.logtype), 0) from clientgroup t1 join client t2 on t1.clientid = t2.id left join clientcontactlog t3 on t1.clientid = t3.clientid left join contactlog t4 on t3.Logid = t4.Logid where t1.Groupid = 1 表,您可以这样做:

.fixed
{
  width: 100%;
  height: 100px;
  background-color:red;
  display:flex;
}

h1
{
  height: 100px;
  display:flex;
  align-items:center;
  margin:0 10px;
  color:white;
}

nav
{
    position:relative;
    height:100%;
    width: auto;
    display:flex;
    align-items:center;
    justify-content:space-around;
    background-color:green;

    top:0;
    right:0;

    > ul
    {
        height:auto;
        padding: 0px 40px;
        > li
        {
            font-size: 15px;
            padding: 0 12px;
            text-align:center;
            line-height: inherit;
            display:inline-block;


            &:not(:last-child)
            {
                margin-right:0;
            }

            button
            {
              padding: 0;

              &:hover
              {
                background-color: inherit;
                border:none;
              }
            }

            a
            {
                line-height: 50px;
            }
        }
    }
}