我是编写Microsoft SQL查询的新手,我不知道如何处理我的问题,我希望有人可以帮助我:)
我的数据: 我有一个包含10个变量的数据集,其中一个是ID,一个代表年份,另外8个是值为yes或no的测试。 我可以将3个变量归为3组'。
我想做的是写一个声明,给我ID /行,其中所有三个群集都有。
为了澄清,一组由4个变量组成,其他组各包含2个变量。
我想写一些内容,说明如果第1组为是,第2组为是,第3组为是,则返回ID。但我不知道如何对变量进行分组。
提前致谢!
答案 0 :(得分:1)
如果我找对了你需要选择id-s,其中包含每个群集中至少有一个'yes'值,那么你需要这样的东西:
select id from yourtable
where (c1_1 = 'yes' or c1_2 = 'yes' or c1_3 = 'yes' or c1_4 = 'yes')
and (c2_1 = 'yes' or c2_2 = 'yes')
and (c3_1 = 'yes' or c3_2 = 'yes')
为了保持代码清晰,您应该规范化您的数据库结构,即:
create table yourtable (
ID int primary key,
[Year] int
)
create table answers (
ID int primary key identity(1,1),
youtable_id int references yourtable(ID),
cluster_name varchar(10),
question varchar(100),
answer varchar(100)
)
然后像这样查询以获得每个群集中至少有一个肯定答案的ID:
select yt.ID
from yourtable yt inner join answers a on (yt.ID = a.youtable_id)
inner join (select youtable_id as ID, count( distinct cluster_name) as positive_clusters from answers where answer = 'yes' group by youtable_id) as inn on (inn.ID = yt.ID)
group by yt.ID, positive_clusters
having positive_clusters = count(distinct a.cluster_name)