2013-06-04 5 views
1

Я пытался использовать ниже. Мой внутренний запрос работает нормально. Но я получаю сообщение об ошибке при попытке выполнить весь запрос. Пожалуйста, укажите свои данные.Case concept ... Sql server query

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

Добро пожаловать в StackOverflow: если вы разместите код, XML или данных образцов, пожалуйста ** ** выделить те строки в текстовом редакторе и нажмите на кнопку «код samples "(' {} ') на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! –

+1

Какая ошибка вы получаете? – Mez

+0

Спасибо ... Конечно, я обращу внимание на указатели. – 0nir

ответ

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; 
+0

... и были также некоторые синтаксические ошибки, связанные с 'CASE' (которые были исправлены в вашем ответе). – Dukeling

+0

Спасибо. Я новичок в Sql Server ... пытаясь узнать больше о всех возможных практических занятиях. Еще раз спасибо. – 0nir

0

Я думаю, что вы не хватает концы в вашем SQL. См тематическое заявление ниже, с 2-х случаях ...

 

    declare @test int 
    set @test= 1 

    select case when [email protected] then 'Is 2' else 

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