2015-01-06 2 views
0

Ниже приведена таблица базы данных (таблица A).Как получить счет и процент с помощью SQL?

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 

Я хочу, чтобы отобразить процент на основе greatest count в Count1 и Count0. Помогите мне изменить вышеупомянутое решение. The expecting output sample is given below:

Здесь в Count1 3 - это значение greates. Основываясь на этом, я должен найти процент значений Count1. И в Count0 2 - самая большая ценность. Основываясь на этом, я должен найти процент значений Count0.

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

Помогите найти правильное решение. Спасибо.

+0

Вы используете SQL Server? –

+0

@RaduGheorghiu: Да –

ответ

0

Чтобы отобразить проценты к сумме в SQL, мы хотим использовать идеи, которые мы использовали для подпрограммы total/plus total плюс. В отличие от того, что мы видели в разделе SQL Subquery, здесь мы хотим использовать подзапрос как часть SELECT. Давайте используем пример для иллюстрации. Скажем, мы имеем следующую таблицу,

Name Sales 
John 10 
Jennifer 15 
Stella 20 
Sophia 40 
Greg 50 
Jeff 20 

мы напечатали бы,

SELECT a1.Name, a1.Sales, a1.Sales/(SELECT SUM(Sales) FROM Total_Sales) Pct_To_Total 
FROM Total_Sales a1, Total_Sales a2 
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name) 
GROUP BY a1.Name, a1.Sales 
ORDER BY a1.Sales DESC, a1.Name DESC; 

Результат:

Name Sales Pct_To_Total 
Greg 50 0.3226 
Sophia 40 0.2581 
Stella 20 0.1290 
Jeff 20 0.1290 
Jennifer 15 0.0968 
John 10 0.0645 

подзапрос SELECT SUM(Sales) FROM Total_Sales вычисляет сумму. Затем мы можем разделить отдельные значения на эту сумму, чтобы получить процент от общего числа для каждой строки.

Reference является here

0

Является ли это то, что вы спрашиваете, или я совершенно неправильно?

exec ('SELECT TeamName,Count(DISTINCT CASE WHEN WorkInfo = 1 THEN SlNo end) AS Count1 , Count(DISTINCT CASE WHEN WorkInfo = 0 THEN SlNo end) AS Count0, ((Count(DISTINCT CASE WHEN WorkInfo = 1 THEN SlNo end)/'+ @totaldays + ')*100) as Percentage1, ((Count(DISTINCT CASE WHEN WorkInfo = 0 THEN SlNo end)/' + @totaldays + ')*100) as Percentage0 FROM tableA WHERE (SubmitDate BETWEEN ' + @start ' + AND ' + @end + ') GROUP BY TeamName')

0

Если процент базы на дату дифферента даты начала и окончания, а не сами данные

SELECT 
    TeamName, 
    Count(DISTINCT CASE WHEN WorkInfo = 1 THEN SlNo end) AS Count1, 
    Count(DISTINCT CASE WHEN WorkInfo = 0 THEN SlNo end) AS Count0, 
    Count(DISTINCT CASE WHEN WorkInfo = 1 THEN SlNo end) * 100.0/(DATEDIFF(Day, @start, @end) + 1) AS Percentage1, 
    Count(DISTINCT CASE WHEN WorkInfo = 0 THEN SlNo end) * 100.0/(DATEDIFF(Day, @start, @end) + 1) AS Percentage0 
FROM 
    tableA 
WHERE 
    (SubmitDate BETWEEN @start AND @end) 
GROUP BY 
    TeamName 
+0

Привет eric. Ваш ответ работает. Но я изменил свой вопрос. Можете ли вы помочь мне найти решение. –