怎样求这张表中知道一家人中的某一个人,怎样算出全家一共有几人?

解决方案 »

  1.   


    declare @table table (户编号 int,成员编号 int,姓名 varchar(4))
    insert into @table
    select 1,1,'王建' union all
    select 1,2,'王兵' union all
    select 1,4,'王军' union all
    select 2,1,'张一' union all
    select 2,2,'张二' union all
    select 2,3,'张三' union all
    select 2,4,'张四'select t.姓名,a.人数 from 
    (select 户编号,count(*) as 人数 from @table group by 户编号) a
    left join @table t 
    on a.户编号=t.户编号 and t.姓名 in ('王兵','张三')
    /*
    姓名   人数
    ---- -----------
    王兵   3
    张三   4
    */
      

  2.   

    DECLARE @t TABLE(户编号 INT ,成员编号 INT ,姓名 VARCHAR(10))
    INSERT @t
    SELECT 1, 1, '王建' UNION ALL
    SELECT 1, 2, '王兵' UNION ALL
    SELECT 1, 4, '王军' UNION ALL
    SELECT 2, 1, '张一' UNION ALL
    SELECT 2, 2, '张二' UNION ALL
    SELECT 2, 3, '张三' UNION ALL
    SELECT 2, 4, '张四'SELECT 户编号, COUNT(*) AS 家庭人口总数 FROM @t  WHERE 户编号 IN (SELECT 户编号 FROM @t WHERE 姓名 IN ('张三','王兵')) GROUP BY 户编号
      

  3.   

    DECLARE @t TABLE(户编号 INT ,成员编号 INT ,姓名 VARCHAR(10))
    INSERT @t
    SELECT 1, 1, '王建' UNION ALL
    SELECT 1, 2, '王兵' UNION ALL
    SELECT 1, 4, '王军' UNION ALL
    SELECT 2, 1, '张一' UNION ALL
    SELECT 2, 2, '张二' UNION ALL
    SELECT 2, 3, '张三' UNION ALL
    SELECT 2, 4, '张四'SELECT 户编号, COUNT(*) AS 家庭人口总数 FROM @t  WHERE 户编号 IN (SELECT 户编号 FROM @t WHERE 姓名 IN ('张三','王兵')) GROUP BY 户编号
      

  4.   


    declare @表一 table (户编号 int,成员编号 int,姓名 varchar(4))
    insert into @表一
    select 1,1,'王建' union all
    select 1,2,'王兵' union all
    select 1,4,'王军' union all
    select 2,1,'张一' union all
    select 2,2,'张二' union all
    select 2,3,'张三' union all
    select 2,4,'张四'declare @表二 table (姓名 varchar(4),职业 varchar(6))
    insert into @表二
    select '王兵','工程师' union all
    select '张三','经理'select aa.姓名,aa.职业,bb.家庭总人数 from (select a.*,b.户编号 from @表二 a left join @表一 b on a.姓名=b.姓名) aa left join 
    (select 户编号,count(*) 家庭总人数 from @表一 group by 户编号) bb on aa.户编号=bb.户编号/*
    姓名   职业     家庭总人数
    ---- ------ -----------
    王兵   工程师    3
    张三   经理     4
    */
      

  5.   


    use tempdb;
    /*
    create table t2
    (
    户编号 int not null,
    成员编号 int not null,
    姓名 nvarchar(10) not null
    );
    insert into t2(户编号,成员编号,姓名)
    values
    (1,1,'王建'),
    (1,2,'王兵'),
    (1,4,'王军'),
    (2,1,'张一'),
    (2,2,'张二'),
    (2,3,'张三'),
    (2,4,'张四');
    */
    select t2.姓名,[家庭人数]
    from 
    (
    select 户编号,COUNT(成员编号) as [家庭人数]
    from t2 group by 户编号
    ) as t join t2
    on t2.户编号 = t.户编号
    where t2.姓名 in ('张三','王兵');
      

  6.   

    declare @t1 table (户编号 int,成员编号 int,姓名 varchar(4))
    insert into @t1
    select 1,1,'王建' union all
    select 1,2,'王兵' union all
    select 1,4,'王军' union all
    select 2,1,'张一' union all
    select 2,2,'张二' union all
    select 2,3,'张三' union all
    select 2,4,'张四'declare @t2 table (姓名 varchar(4),职业 varchar(6))
    insert into @t2
    select '王兵','工程师' union all
    select '张三','经理'
     
    ----------------------------------------------------------------
     select 姓名, (select count(c.户编号)  
    from @t1 c where c.户编号 in ( select  a.户编号  from @t1 a 
    where a.姓名 = b.姓名) group by c.户编号 )as '家庭人数'
    from @t2 b
      

  7.   

    create table a 
    (
    hid int,
    sNO int ,
    name varchar(10)
    );insert into a values(1,1,'王建');
    insert into a values(1,2,'王兵');
    insert into a values(1,4,'王军');
    insert into a values(2,1,'张一');
    insert into a values(2,2,'张二');
    insert into a values(2,3,'张三');
    insert into a values(2,4,'张四');select  * from a;
    select count(*) from a where hid =(select hid from a where name ='王建');
      

  8.   


    if object_id('tb1') is not null drop table tb1
    GO
    create table  tb1(户编号 int,成员编号 int,姓名 varchar(4))
    insert into tb1
    select 1,1,'王建' union all
    select 1,2,'王兵' union all
    select 1,4,'王军' union all
    select 2,1,'张一' union all
    select 2,2,'张二' union all
    select 2,3,'张三' union all
    select 2,4,'张四'if object_id('tb2') is not null drop table tb2
    GO
    create table tb2 (姓名 varchar(4),职业 varchar(6))
    insert into tb2
    select '王兵','工程师' union all
    select '张三','经理'with cte as
    (
    select 户编号,成员编号,姓名,家庭总人数=count(*) over(partition by 户编号) from tb1
    )
    select * from cte where 姓名 in(select 姓名 from tb2)--查询结果
    户编号         成员编号        姓名   家庭总人数
    ----------- ----------- ---- -----------
    1           2           王兵   3
    2           3           张三   4(2 行受影响)