SQL - 使用两个不同的“where”语句从同一个表中提取数据

时间:2014-02-17 17:49:53

标签: sql sql-server

我有一个包含以下列的表...

TestName - StepNumber - Data_1

我正在尝试编写一个可以查找Data_1结果并将其平均一天的查询。 TestNames是我们正在运行的独特测试,StepNumbers是测试中的各个步骤。通常,我会使用像

这样的东西
select Data_1 from table
where TestName in(1,2,3,4)
and StepNumber in(1)

返回我需要的所有Data_1结果。但是,有时我需要的数据位于表格的不同步骤中。测试1可能具有步骤2中的所需数据,步骤10中的测试2等等...最后,我需要所有类似StepNumber结果的Data_1结果的平均值。我不确定如何在单个查询中捕获这些数据。查询中有一个单独的部分,我按地理位置划分它,单独完成它需要很长时间。

我会寻找类似......

的东西
select avg(Data_1) from table
where TestName = 1 and StepNumber = 2
and TestName = 2 and StepNumber = 10
and TestName = 3 and StepNumber = 5

如果我能澄清一下,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:1)

select avg(Data_1)
  from table
 where (TestName = 1 and StepNumber = 2)
    or (TestName = 2 and StepNumber = 10)
    or (TestName = 3 and StepNumber = 5)

答案 1 :(得分:0)

如果我理解正确,您的表格中有三个(或更多)数据集:

  1. TestName = 1和StepNumber = 2 - 基数N1
  2. Testname = 2和StepNumber = 10 - 基数N2
  3. TestName = 3和StepNumber = 5 - 基数N3
  4. 如果您希望所有三个的平均值,则需要选择三列。 AVG在这种情况下无法帮助你,因为它会在N4的基数上运行平均值,这是三组的交集。所以你必须手工完成。我不知道这将如何执行与三个单独的查询:

    SELECT
        AVG(Data_1) AS OverallAverage,
    
        SUM(IF((TestName = 1 AND StepNumber = 2),  Data_1, 0))
       /SUM(IF((TestName = 1 AND StepNumber = 2),       1, 0)) AS AvgGroup1,
    
        SUM(IF((TestName = 2 AND StepNumber = 10), Data_1, 0))
       /SUM(IF((TestName = 2 AND StepNumber = 10),      1, 0)) AS AvgGroup2,
    
        SUM(IF((TestName = 3 AND StepNumber = 5),  Data_1, 0))
       /SUM(IF((TestName = 3 AND StepNumber = 5),       1, 0)) AS AvgGroup3
    FROM table
       WHERE (
          ( TestName = 1 AND StepNumber = 2)
          OR
          ( TestName = 2 AND StepNumber = 10)
          OR
          ( TestName = 3 AND StepNumber = 5)
    );
    

    这种查询可以从组件中组合,即根据组的编程方式。

    This是一个显示结果的SQLFiddle。