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 */
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 户编号
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 户编号
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 */
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 ('张三','王兵');
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
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 ='王建');
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 行受影响)
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
*/
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 户编号
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 户编号
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
*/
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 ('张三','王兵');
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
(
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 ='王建');
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 行受影响)