Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание Итога  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите как мне сделать, что бы в конце всех строк, шла строка с названием Итог и подсчитывала среднее количество всех баллов?


SELECT H.Estimate, C.ID AS [CONTRACT], H.Code, C4.Name, H.[Start], H.Finish, round(avg(cast(c1.ball as FLOAT)),1) AS Ball, SUM(B.Price) AS TotalPrice, C1.[Status]
FROM ContractFull C 
	INNER JOIN _ApplicHeads A ON C.ID = A.Acceptor
	INNER JOIN _ApplicBodies B ON A.Applic = B.ApplicID
	INNER JOIN _EstimateHeads H ON H.Estimate = A.EstimateID 
	INNER JOIN ContractFullBall C1 ON C1.Estimate = H.Estimate AND C1.ContractID = A.Acceptor
	INNER JOIN  CrmProjects C4 ON H.ProjectID = C4.Project
	WHERE C1.STATUS > 0 AND C.ID = 11943000
	GROUP BY H.Estimate, C.ID, H.Code, C4.Name, H.[Start], H.Finish, C1.[Status]
5 окт 16, 16:17    [19746935]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20587
GROUP BY ROLLUP?
5 окт 16, 16:21    [19746952]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4906
Pabl0
Подскажите как мне сделать, что бы в конце всех строк, шла строка с названием Итог и подсчитывала среднее количество всех баллов?


SELECT H.Estimate, C.ID AS [CONTRACT], H.Code, C4.Name, H.[Start], H.Finish, round(avg(cast(c1.ball as FLOAT)),1) AS Ball, SUM(B.Price) AS TotalPrice, C1.[Status]
FROM ContractFull C 
	INNER JOIN _ApplicHeads A ON C.ID = A.Acceptor
	INNER JOIN _ApplicBodies B ON A.Applic = B.ApplicID
	INNER JOIN _EstimateHeads H ON H.Estimate = A.EstimateID 
	INNER JOIN ContractFullBall C1 ON C1.Estimate = H.Estimate AND C1.ContractID = A.Acceptor
	INNER JOIN  CrmProjects C4 ON H.ProjectID = C4.Project
	WHERE C1.STATUS > 0 AND C.ID = 11943000
	GROUP BY H.Estimate, C.ID, H.Code, C4.Name, H.[Start], H.Finish, C1.[Status]


UNION ALL
нужный вам селект с итогами
5 окт 16, 16:23    [19746961]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Akina, нет
5 окт 16, 16:24    [19746965]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Megabyte, тоже не верно, не получится сделать из тех соображений, что бы посчитать Ball нужно его один выводить, иначе не будет считаться общий.

SELECT H.Estimate, C.ID AS [CONTRACT], H.Code, C4.Name, H.[Start], H.Finish, round(avg(cast(c1.ball as FLOAT)),1) AS Ball, SUM(B.Price) AS TotalPrice, C1.[Status]
INTO #Temp	
FROM ContractFull C 
	INNER JOIN _ApplicHeads A ON C.ID = A.Acceptor
	INNER JOIN _ApplicBodies B ON A.Applic = B.ApplicID
	INNER JOIN _EstimateHeads H ON H.Estimate = A.EstimateID 
	INNER JOIN ContractFullBall C1 ON C1.Estimate = H.Estimate AND C1.ContractID = A.Acceptor
	INNER JOIN  CrmProjects C4 ON H.ProjectID = C4.Project
	WHERE C1.STATUS > 0 AND C.ID = 11943000
	GROUP BY H.Estimate, C.ID, H.Code, C4.Name, H.[Start], H.Finish, C1.[Status] --WITH ROLLUP
	
	SELECT Estimate, [CONTRACT], Code, Name, [Start], Finish, Ball, TotalPrice, [Status] FROM #Temp
	
	UNION ALL
	
	SELECT avg(Ball) AS AVG_BALL
	FROM #Temp
	
	
	
	
	
	DROP TABLE #Temp
	

	

	
5 окт 16, 16:26    [19746980]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Вот так уже кое что :)


SELECT H.Estimate, C.ID AS [CONTRACT], H.Code, C4.Name, H.[Start], H.Finish, round(avg(cast(c1.ball as FLOAT)),1) AS Ball, SUM(B.Price) AS TotalPrice, C1.[Status]
INTO #Temp	
FROM ContractFull C 
	INNER JOIN _ApplicHeads A ON C.ID = A.Acceptor
	INNER JOIN _ApplicBodies B ON A.Applic = B.ApplicID
	INNER JOIN _EstimateHeads H ON H.Estimate = A.EstimateID 
	INNER JOIN ContractFullBall C1 ON C1.Estimate = H.Estimate AND C1.ContractID = A.Acceptor
	INNER JOIN  CrmProjects C4 ON H.ProjectID = C4.Project
	WHERE C1.STATUS > 0 AND C.ID = 11943000
	GROUP BY H.Estimate, C.ID, H.Code, C4.Name, H.[Start], H.Finish, C1.[Status] --WITH ROLLUP
	
	SELECT Estimate, [CONTRACT], Code, Name, [Start], Finish, Ball, TotalPrice, [Status] FROM #Temp
	
	UNION ALL
	
	SELECT NULL, NULL, NULL, NULL, NULL, NULL, avg(Ball) AS AVG_BALL, NULL, null
	FROM #Temp
		
	DROP TABLE #Temp	
5 окт 16, 16:33    [19747017]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Pabl0,

требуемое обычно делается средствами отчетной системы, а не запросами. Кроме того, Вы в запросе не добавили столбец сортировки, чтобы строка итога оказалась внизу.
5 окт 16, 16:39    [19747045]     Ответить | Цитировать Сообщить модератору
 Re: Создание Итога  [new]
iljy
Member

Откуда:
Сообщений: 8711
Pabl0,

вообще ROLLUP делает именно это, надо только дополнительно использовать GROUPING(). Ну или можно еще проще - использовать GROUPING SETS
5 окт 16, 16:44    [19747071]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить