将sql查询写入组变量

时间:2015-05-01 08:45:53

标签: sql sql-server

我是编写Microsoft SQL查询的新手,我不知道如何处理我的问题,我希望有人可以帮助我:)

我的数据: 我有一个包含10个变量的数据集,其中一个是ID,一个代表年份,另外8个是值为yes或no的测试。 我可以将3个变量归为3组'。

我想做的是写一个声明,给我ID /行,其中所有三个群集都有。

为了澄清,一组由4个变量组成,其他组各包含2个变量。

我想写一些内容,说明如果第1组为是,第2组为是,第3组为是,则返回ID。但我不知道如何对变量进行分组。

提前致谢!

1 个答案:

答案 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)

Sample data