父母子女数 - 新挑战

时间:2014-02-13 18:12:02

标签: sql tsql

对不起伙计们 我想我在一个查询中混合了两个要求。

我将重新解决我的问题。请忽略上面的ddl:

此报告的基本方案是:

MASTER表有一个不同行号或(电话号码)的列表,他们都有唯一的帐号和电话号码。

我们的数据库中还有一个基表,这是一个每日快照,告诉我们某一天特定计划中有哪些活动。

例如,假设在2月12日,根据基表,电话号码是活跃的。

现在连同基表,我有一个MASTER表,它告诉我们这些电话号码是如何到达基地的,这是一个新的连接,还是从其他计划改变计划。

为了解释亲子关系,有一个领导者计划(带有领导者/父母代码),一个电话号码包含这个父代码,这个父母可以有多个儿童电话号码,他们都共享相同的计划和确定父和子nos的方法是通过ACCOUNT NO,因为父和子共享给定共享计划的同一帐户号。

我的数据库共有4个父计划(4个不同的父代码)和1个共享计划代码。

在我的查询中,我需要计算在给定月份中有多少共享者属于特定父母,还需要计算父母总数的数量,计划变更数量,新连接数量和共享者数量相同好。

我可以计算基表中的父/子计数,它可以正常工作。

这是使用sqlfiddle.com修改的MASTER表的ddl,这里是它的链接。 http://sqlfiddle.com/#!2/83843/1

CREATE TABLE Master_Table
    (
     BaseDate DATETIME
    ,Account_no VARCHAR(4)
    ,Phone_no INT
    ,Code VARCHAR(2)
    ,New_connect INT
    ,Plan_change INT
    );

INSERT INTO Master_Table
        ( BaseDate, Account_no, Phone_no, Code, New_connect, Plan_change )
    VALUES  ( '2014-02-01 13:00:00', 'A123', 21332, 'P1', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A123', 21444, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A123', 21445, 'C1', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A124', 21333, 'P2', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A124', 21771, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A124', 21772, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A124', 21773, 'C1', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A126', 213321, 'P1', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A126', 214443, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A126', 214452, 'C1', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A129', 213331, 'P3', 1, 0 ),
            ( '2014-02-01 13:00:00', 'A129', 21771, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A129', 21772, 'C1', 0, 1 ),
            ( '2014-02-01 13:00:00', 'A129', 21773, 'C1', 1, 0 );

我想要的输出是:

Base_Date            Parent_code Parent_new_connect Parent_plan_change Child_new_connect Child_plan_change
'2014-02-01 13:00:00' P1         2                  0                   2                   2
'2014-02-01 13:00:00' P2         1                  0                   2                   2
'2014-02-01 13:00:00' P3         1                  0                   1                   2

希望这次更清楚。

1 个答案:

答案 0 :(得分:0)

我想我明白你在寻找什么,并在这里有一个查询产生我认为你想要的...我请你确认P2的所需值 - Child_new_connet,因为我得到一个不同的数字。这是针对您提供的数据的查询。

select 
    M.BaseDate, 
    M.Code ParentCode,
    sum(M.New_Connect) Parent_New_Connect,
    sum(M.Plan_Change) Parent_Plan_Change,
    (select sum(new_connect) connect from Master_Table where Code like 'C%' and Account_no in (select Account_no from Master_Table where Code = M.Code)) Child_New_Connect,
    (select sum(Plan_change) connect from Master_Table where Code like 'C%' and Account_no in (select Account_no from Master_Table where Code = M.Code)) Child_Plan_Change
from 
    Master_Table M
where
    Code like 'P%'
group by
    BaseDate,
    Code