2015-12-23 2 views
2

Я хотел бы объединить два запросДва SELECT COUNT запросов, а затем рассчитать процент

SELECT COUNT(*) FROM abc; 
SELECT COUNT(Status) FROM ABC WHERE Status='Active'; 

А затем рассчитать процент (взятие 2-го запроса, деленный на первом запрос). Я хотел бы достичь этого в одном запросе. То, что я пытался до сих пор:

SELECT COUNT(*) AS A FROM abc 
UNION 
SELECT COUNT(Status) AS B FROM ABC WHERE Status='Active'; 
UNION 
SELECT(COUNT(Status)*100/SELECT COUNT(*) FROM abc)) AS %ofAB FROM abc WHERE Status='Active' 

Что я получаю:

A 
-- 
31 
36 
86,11111111 

Что я хочу:

A | B | %ofAB 
--------------------- 
36 | 31 | 86,1111111%  

ответ

2

Это должно дать вам то, что вы хотите:

SELECT 
    COUNT(*) AS TotalCount, 
    SUM(IIF(Status = 'Active', 1, 0)) AS ActiveCount, 
    ROUND((SUM(IIF(Status = 'Active', 1, 0)) * 100/ COUNT(*)),2) AS PctActive 
FROM 
    Abc 

EDIT: Не заметил, что это было для Access. Я не знаю, доступен ли CAST в Access, поэтому вам может понадобиться использовать эквивалентную функцию, чтобы убедиться, что целые числа не просто дают 1 или 0. Возможно, что Access автоматически преобразует деление в десятичное число, но в SQL Server это не так.

+0

Благодарим за редактирование Blazyb! –

Смежные вопросы