22,209
社区成员
发帖
与我相关
我的任务
分享
create table tb(id int,问题 nvarchar(20),答案 nvarchar(10),回答人 nvarchar(10))
insert into tb values(1,'选择题1(你是哪里人)','上海','小王')
insert into tb values(2,'选择题2(你是工作是)','老师','小王')
insert into tb values(3,'选择题1(你是哪里人)','北京','小明')
insert into tb values(4,'选择题2(你是工作是)','律师','小明')
insert into tb values(5,'选择题1(你是哪里人)','上海','小张')
insert into tb values(6,'选择题2(你是工作是)','医生','小张')
go
select t1.*,t2.* , isnull(t3.人数,0) 人数 from
(select distinct 答案 地点 from tb where charindex('你是哪里人',问题) > 0) t1 cross join
(select distinct 答案 职业 from tb where charindex('你是哪里人',问题) = 0) t2
left join
(select m.答案 地点, n.答案 职业 , count(1) 人数 From tb m , tb n where m.id%2 = 1 and m.id = n.id - 1 group by m.答案 , n.答案) t3
on t1.地点 = t3.地点 and t2.职业 = t3.职业
drop table tb
/*
地点 职业 人数
---------- ---------- -----------
北京 老师 0
北京 律师 1
北京 医生 0
上海 老师 1
上海 律师 0
上海 医生 1
(所影响的行数为 6 行)
*/
create table tb(问题 nvarchar(20),答案 nvarchar(10),回答人 nvarchar(10))
insert into tb select '选择题1(你是哪里人)','(上海)','小王'
insert into tb select '选择题2(你是工作是)','(老师)','小王'
insert into tb select '选择题1(你是哪里人)','(北京)','小明'
insert into tb select '选择题2(你是工作是)','(律师)','小明'
insert into tb select '选择题1(你是哪里人)','(上海)','小张'
insert into tb select '选择题2(你是工作是)','(医生)','小张'
go
select a.地点,a.工作,sum(case when b.地点 is null then 0 else 1 end) 人数 from(
select b.答案 地点,a.答案 工作 from
(select distinct 答案 from tb where 问题='选择题2(你是工作是)')a,
(select distinct 答案 from tb where 问题='选择题1(你是哪里人)')b
)a left join (
select a.答案 地点,b.答案 工作 from tb a inner join tb b
on a.回答人=b.回答人 and a.问题='选择题1(你是哪里人)' and b.问题='选择题2(你是工作是)'
)b on a.地点=b.地点 and a.工作=b.工作
group by a.地点,a.工作
order by a.地点
/*
地点 工作 人数
---------- ---------- -----------
(北京) (老师) 0
(北京) (律师) 1
(北京) (医生) 0
(上海) (老师) 1
(上海) (律师) 0
(上海) (医生) 1
(6 行受影响)
*/
go
drop table tb