案例概念... Sql server查询

时间:2013-06-04 15:37:05

标签: sql-server

我正在尝试下面的内容。我的内部查询工作正常。但是当我尝试整个查询时出现错误。请提供您的意见。

select 
   x.TeamProjectProjectNodeName,
   x.TestPlanName, 
   (case when x.ResultOutcome in ('Aborted','Error','Failed','Inconclusive','Timeout','Blocked') 
     then sum(count(x.ResultOutcome)) else 0
     as "Failed"  
     when x.ResultOutcome in ('Passed') 
     then sum(count(x.ResultOutcome)) else 0
     as "Passed" 
     when x.ResultOutcome in ('Not Executed') 
     then sum(count(x.ResultOutcome)) else 0
     as "Not Run"
     END
    )
from (select 
         TeamProjectProjectNodeName,
         TestPlanName,
         ResultOutcome, 
         count(*) as Total 
      from [Tfs_Warehouse].[dbo].[TestResultView] 
      where TestPlanName IS NOT NULL
      GROUP BY TeamProjectProjectNodeName, TestPlanName, ResultOutcome
     ) x
order by TeamProjectProjectNodeName asc, TestPlanName asc 

这是我从内部查询中得到的 -

TeamProjectProjectNodeName  TestPlanName    ResultOutcome   Total
ACATS                       Test Automation Aborted            26
ACATS                       Test Automation Failed             61

这是我正在寻找的最终结果格式 -

TeamProjectProjectNodeName  TestPlanName    Failed  Passed    Not_Run
ACATS                       Test Automation 87     0        0

2 个答案:

答案 0 :(得分:3)

嵌套聚合是无效的语法(即(sum(count)))。根据您现有的查询,您似乎正在尝试按以下方式转动数据:

select 
   x.TeamProjectProjectNodeName,
   x.TestPlanName, 
   sum(case when x.ResultOutcome in ('Aborted','Error','Failed','Inconclusive','Timeout','Blocked') then 1 else 0 end) as Failed,
   sum(case when x.ResultOutcome = 'Passed' then 1 else 0 end) as Passed,
   sum(case when x.ResultOutcome = 'Not Executed' then 1 else 0 end) as NotRun
from 
(
   select 
       TeamProjectProjectNodeName,
       TestPlanName,
       ResultOutcome, 
       count(*) as Total 
   from [Tfs_Warehouse].[dbo].[TestResultView] 
   where TestPlanName IS NOT NULL
   GROUP BY TeamProjectProjectNodeName, TestPlanName, ResultOutcome
) x
group by x.TeamProjectProjectNodeName, x.TestPlanName
order by TeamProjectProjectNodeName asc, TestPlanName asc;

您应该能够使用以下方法合并此代码:

select 
   TeamProjectProjectNodeName,
   TestPlanName,
   sum(case when ResultOutcome in ('Aborted','Error','Failed','Inconclusive','Timeout','Blocked') then 1 else 0 end) as Failed,
   sum(case when ResultOutcome = 'Passed' then 1 else 0 end) as Passed,
   sum(case when ResultOutcome = 'Not Executed' then 1 else 0 end) as NotRun
from [Tfs_Warehouse].[dbo].[TestResultView] 
where TestPlanName IS NOT NULL
GROUP BY TeamProjectProjectNodeName, TestPlanName
order by TeamProjectProjectNodeName asc, TestPlanName asc;

答案 1 :(得分:0)

我认为你的SQL中缺少结尾。请参阅下面的案例陈述,有2个案例......


    declare @test int
    set @test= 1

    select case when 2=@test then 'Is 2' else 

     case when @test = 3 then 'Is 3' else @test end  end