急求一句内部连接的SQL语句,若能帮老衲写出来万万万分感谢!!!!!!!

mingwj1980 2011-09-15 07:27:16
数据结构是这样的

问题 答案 回答人

选择题1(你是哪里人) (上海) 小王
选择题2(你是工作是) (老师) 小王
选择题1(你是哪里人) (北京) 小明
选择题2(你是工作是) (律师) 小明
选择题1(你是哪里人) (上海) 小张
选择题2(你是工作是) (医生) 小张

要的效果是
选择(上海)的人里面
选择(老师)的人数是1
选择(律师)的人数是0
选择(医生)的人数是1

选择(北京)的人里面
选择(老师)的人数是0
选择(律师的人数是1
选择(医生)的人数是0



这个SQL语句好写么?先万分感谢!!!
...全文
105 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuanzhang5687 2011-09-16
  • 打赏
  • 举报
回复
你想多了[Quote=引用 9 楼 mingwj1980 的回复:]
楼上说表建得不好的,我只能说这只是我举的一个简单的例子而已。

实际上的情况不是这样的。也是为了满足业务的需要而已
[/Quote]
陪你在路上 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qianjin036a 的回复:]

引用 9 楼 mingwj1980 的回复:
楼上说表建得不好的,我只能说这只是我举的一个简单的例子而已。

实际上的情况不是这样的。也是为了满足业务的需要而已


其实,你完全可以更明确一点地列出你的数据和你要的结果,你给出的这个表和结果,就像伪代码一样,是个伪表,在这种伪表上写语句是很比较麻烦的,要去伪存真,而各人去伪的思想不同,不一定能与你编伪的思想全拍,因此,写出来的代码就不……
[/Quote]
顶。。
-晴天 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mingwj1980 的回复:]
楼上说表建得不好的,我只能说这只是我举的一个简单的例子而已。

实际上的情况不是这样的。也是为了满足业务的需要而已
[/Quote]

其实,你完全可以更明确一点地列出你的数据和你要的结果,你给出的这个表和结果,就像伪代码一样,是个伪表,在这种伪表上写语句是很比较麻烦的,要去伪存真,而各人去伪的思想不同,不一定能与你编伪的思想全拍,因此,写出来的代码就不一定能适合你实际的表了.
mingwj1980 2011-09-15
  • 打赏
  • 举报
回复
楼上说表建得不好的,我只能说这只是我举的一个简单的例子而已。

实际上的情况不是这样的。也是为了满足业务的需要而已
Mr_Nice 2011-09-15
  • 打赏
  • 举报
回复
这设计! 厉害...
--小F-- 2011-09-15
  • 打赏
  • 举报
回复
看起来真累

这样的设计
dawugui 2011-09-15
  • 打赏
  • 举报
回复
--我加上一个序号.
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 行)

*/
dawugui 2011-09-15
  • 打赏
  • 举报
回复
这表设计得实在太差劲了.
mingwj1980 2011-09-15
  • 打赏
  • 举报
回复
哇塞楼上太强了,我研究下,应该差不多了~
-晴天 2011-09-15
  • 打赏
  • 举报
回复
这样表述行不:
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
mingwj1980 2011-09-15
  • 打赏
  • 举报
回复
楼上什么意思?????????
chuanzhang5687 2011-09-15
  • 打赏
  • 举报
回复
fcuk

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧