SQL Server 2005 Business Intelligence использует 2 набора данных один отчет - PullRequest
0 голосов
/ 02 февраля 2012

Просто нужна помощь / совет по SQL Server 2005 и Visual Studio 2005.

По сути, у меня есть 2 набора данных, один из которых приводит к общему количеству хороших вызовов, а другой - к количеству плохих вызовов.

Я хочу сделать отчет, в котором будет показано соотношение хорошего и плохого.

Для сбоев вызовов Actstatus имеет "105"

SELECT Country, count(status) AS FailedCalls
FROM termactivity(nolock) 
INNER JOIN termconfig(NOLOCK) ON cfgterminalID = actterminalID
WHERE actstatus IN (105)
GROUP BY country
ORDER BY country

Для хороших звонков actstatus имеет "5" в своей ячейке

SELECT Country, count(status) AS FailedCalls
FROM termactivity(nolock) 
INNER JOIN termconfig(NOLOCK) ON cfgterminalID = actterminalID
WHERE actstatus IN (5)
GROUP BY country
ORDER BY country

Теперь оба этих результата приводят к таблицам с названием страны и номерами, как показано ниже

 Country    fails
    AT  240
    BE  3
    CH  1
    CZ  23
    DE  5733
    ES  336
    FR  2
    IE  1066
    IT  7085
    NL  260
    NZ  89
    PT  790

    Country CallSuccess
    AT  5662
    BE  480
    CH  370
    CZ  1124
    DE  19412
    ES  7740
    FR  1976
    IE  26616
    IT  32764
    NL  4046
    NZ  114
    PT  6567

Как я могу добавить их к одному макету и в итоге получить таблицу, как, скажем, ниже:

Country CallSuccess  fails
AT  5662                 240
BE  480                  10
CH  370                  22
CZ  1124                 112
DE  19412                888
ES  7740                 etc..
FR  1976
IE  26616
IT  32764
NL  4046
NZ  114
PT  6567

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Я бы изменил ваш sql, чтобы вернуть такой набор данных, как этот.

Select Country,
        Sum(Case When actstatus = 5 Then 1 Else 0 End) As FailedCalls,
        Sum(Case When actstatus = 105 Then 1 Else 0 End) As SucceededCalls
From  termactivity(nolock)  
    INNER JOIN termconfig(NOLOCK) ON cfgterminalID = actterminalID 
Where  actstatus IN (5, 105)
Group By Country
order By Country
1 голос
/ 02 февраля 2012

COUNT игнорирует NULL, и CASE выдает NULL для подразумеваемого условия ELSE

SELECT
   Country, 
   count(CASE WHEN actstatus = 105 THEN status END) AS FailedCalls,
   count(CASE WHEN actstatus = 5 THEN status END) AS GoodCalls
FROM
   termactivity(nolock) 
    INNER JOIN
   termconfig(NOLOCK) ON cfgterminalID = actterminalID
where actstatus IN (105, 5)
GROUP BY country
ORDER BY country
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...