SQL查询返回需要分组的数据列表

时间:2010-09-27 19:42:10

标签: sql excel

我试图用sql查询从我们的测试数据库中提取一些数据而且我被卡住了。下面是我运行数据时的数据表示以及运行后的外观。

我得到了什么

Sample_Number  Centre_Code  DateEntered  AssayName
---------------------------------------------------
1              234          9/16/2010    TEST 1
1              234          9/16/2010    TEST 2
1              234          9/16/2010    TEST 3
1              234          9/16/2010    TEST 4
1              234          9/16/2010    TEST 5         
2              345          9/17/2010    TEST 1
2              345          9/17/2010    TEST 2
2              345          9/17/2010    TEST 3         
3              456          9/16/2010    TEST 1
3              456          9/16/2010    TEST 2
3              456          9/16/2010    TEST 3
3              456          9/16/2010    TEST 4
3              456          9/16/2010    TEST 5
3              456          9/16/2010    TEST 6
3              456          9/16/2010    TEST 7

我想要的是什么

Sample_Number  Centre_Code  DateEntered  ProfileName
-----------------------------------------------------                       
1              234          9/16/2010    PROFILE 1          
2              345          9/17/2010    PROFILE 2          
3              456          9/16/2010    PROFILE 3

我遇到的问题是我有这些测试配置文件,其中一组特定的测试组成了每个样本的配置文件,我无法将它们分组到配置文件中,我只能进行单独的测试。我在考虑在查询中使用CASE并指定每个配置文件测试的内容,但这似乎并不高效,而且它也超出了我的sql知识限制。这是我到目前为止的查询。

SELECT     User.Sample.Sample_Number,User.Centre.Centre_Code, User.Sample.DateEntered, User.Assay.AssayName
FROM         User.Sample INNER JOIN
                      User.Centre ON User.Sample.Centre_ID = User.Centre.Centre_Id INNER JOIN
                      User.Profile ON User.Sample.Profile_ID = User.Profile.Profile_ID INNER JOIN
                      User.Batch ON User.Sample.Batch_ID = User.Batch.Batch_ID INNER JOIN
                      User.SampleResult ON User.Sample.Sample_ID = User.SampleResult.Sample_ID INNER JOIN
                      User.Assay INNER JOIN
                      User.Result ON User.Assay.Assay_ID = User.Result.Assay_ID ON 
                      User.SampleResult.Assay_ID = User.Assay.Assay_ID AND User.SampleResult.Result_ID = User.Result.Result_ID INNER JOIN
                      User.Test ON User.Profile.Profile_ID = User.Test.Profile_ID AND User.Assay.Assay_ID = User.Test.Assay_ID
WHERE     (User.Sample.DateEntered > CONVERT(DATETIME, '2010-09-01 23:59:59', 102)) AND (User.Sample.DateEntered < CONVERT(DATETIME, 
                      '2010-09-20 00:00:00', 102))
GROUP BY User.Sample.DateEntered, User.SampleResult.Sample_ID, User.Assay.AssayName, User.Centre.Centre_Code, 
                      User.Sample.Sample_ID, User.Sample.Sample_Number

供参考

概况1 =测试1,测试2,测试3,测试4,测试5

配置文件2 =测试1,测试2,测试3

配置文件3 =测试1,测试2,测试3,测试4,测试5,测试6,测试7

配置文件中的每个测试都将具有相同的样本编号,中心代码和输入日期。

运行查询后,我可以对sql查询执行任何操作,甚至可以在excel中对其进行操作吗?

2 个答案:

答案 0 :(得分:2)

如何在另一个数据库表中设置配置文件和测试之间的关系并加入该表?这样你可以选择/分组你想要的个人资料名称,而不是测试名称

答案 1 :(得分:0)

GROUP BY子句中有太多字段。 从GROUP BY子句中删除User.Assay.AssayName。 这应该让您更接近您正在寻找的东西。 您可能还想从GROUP BY子句中删除其他字段。 我希望这会有所帮助。