2015-01-05 3 views
-8

У меня есть следующие таблицы баз данных (TableA):Как получить проценты от максимального количества баллов?

SlNo TeamName WorkInfo 
---- ------- ------- 
1  Team1  0  
2  Team1  0  
3  Team1  1  
4  Team2  1  
5  Team2  1 
6  Team2  1  
7  Team3  0  
8  Team3  1  

У меня также есть два текстовых полей для выбора даты начала и окончания и хочу, чтобы отобразить детали между выбранными датами.

В настоящее время нижеследующий запрос дает информацию на основе выбранной даты начала и окончания.

SELECT 
    TeamName, 
    Count(DISTINCT CASE WHEN WorkInfo = 1 THEN SlNo END) AS Count1, 
    Count(DISTINCT CASE WHEN WorkInfo = 0 THEN SlNo END) AS Count0 
FROM tableA 
WHERE (SubmitDate BETWEEN @start AND @end) 
GROUP BY TeamName 

Он производит результаты, как те, приведены ниже:

TeamName Count1 Count0 
-------- ----- ------ 
Team1  1  2 
Team2  3  0 
Team3  1  1 

Но вместо этого я хочу, чтобы отобразить проценты, основанные на максимальном значении чисел в Count1 и Count0.

Например, в ожидаемом выходе ниже, значение 3 является максимальным значением Count1; и на основании этого мне нужно перевести значения счета в проценты от этого максимального значения Count1. Аналогично, 2 - значение max Count0; и на основании этого мне нужно найти процент значений Count0.

TeamName Count1 Count0 Percentage1 Percentage0 
-------- ----- ------ ----------- ----------- 
Team1  1  2  33.33%   100% 
Team2  3  0  100%   0% 
Team3  1  1  33.33%   50% 

Как изменить свое решение для получения ожидаемого результата?

+1

Это таблица базы данных? Что такое DataTable? Является ли ваш заказ значительным? Что вы пробовали? – Liath

+0

Я использовал приведенный ниже запрос. SELECT COUNT (*) FROM TableA. Но это показывает только общее количество таблиц. –

+0

@vipintp да, потому что подсчет записей в таблице – Sybren

ответ

0
SELECT TeamName, Count(TeamName) AS Count 
FROM table 
GROUP BY TeamName 

Вы должны использовать Count функции - Рассчитывать название команды

И вам нужно использовать group by, чтобы определить, как вы хотите отсчеты группировать

Отредактировано ответа.

SELECT TeamName, 
     Count(DISTINCT CASE WHEN WorkInfo = 1 
          THEN SlNo end) AS Count1 , 
     Count(DISTINCT CASE WHEN WorkInfo = 0 
          THEN SlNo end) AS Count0 
FROM tableA 
GROUP BY TeamName 
+0

обновлен для объяснения используемых функций – Matt

+1

Спасибо. Он работает отлично. –

+1

"select TeamName, count (отдельный случай, когда WorkInfo = 1, а затем SlNo end) как Count1, count (отдельный случай, когда WorkInfo = 0, а затем SlNo end) как Count0 из tableA group TeamName" Этот запрос показывает точный вывод. –

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