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

Откуда:
Сообщений: 20
Есть объединение двух таблиц:

SELECT
	scan.ProductName,
	scan.PC,
	softlist.SoftwareNameID
	
FROM 
	LCU_ScanResultsDetailed scan 
	LEFT OUTER JOIN vw_LCU_SoftwareList softlist ON (scan.[ProductName] = softlist.[Название])

ORDER BY ProductName

Результат следующий:
ProductName PC SoftwareNameID
.NET Memory Profiler 3.1 W-11426 NULL
.NET Memory Profiler 3.1 w-12101 NULL
.NET Memory Profiler 3.1 W-20-174 NULL
.NET Pet Shop 4.0 W-10810 NULL
070-526-Demo-CertMagic W-212 NULL
123Scan v2.8 W-772 NULL
1C Предприятие. Б/у. 7.7 (сетевая) W-105 3
1C Предприятие. Расчет. 7.7 (сетевая) W-105 761
1C:Enterprise 8.0 N-5327 NULL
1C:Enterprise 8.1 W-53-3 NULL


Как можно получить процент или отнощение количества ProductName с заполненным SoftwareNameID (т.е. найденных продуктов) к общему количетву ProductName? При этом надо сгруппировать по полю ProductName что различные PC не учитывались.
22 июл 09, 14:45    [7445642]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
iljy
Member

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

не понял, вам для каждого ProductName надо получит эти значения? или для всех сразу?
если для каждого:
select ProductName, count(*), count(SoftwareNameId)
from
( ваш запрос)
group by ProductName
если для всех - группировка не нужна
22 июл 09, 14:49    [7445669]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
вам лучше примерами показывать.
что есть что нужно получить.

----
www.hramin.jino-net.ru
Картинка с другого сайта.
22 июл 09, 14:50    [7445679]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
alkersan
Member

Откуда:
Сообщений: 20
Получить нужно процент найденных Программный продуктов. Продукт считается найденным, если в присоединенной таблице vw_LCU_SoftwareList существует такое имя, т.е. колонка SoftwareNameID не NULL. Но продукт может находиться на разных рабочих станциях (колонка PC).

например в таблице LCU_ScanResultsDetailed может быть 1000 записей. Из них уникальное поле ProductName имеют 100 записей. Из этих 100 записей только 10 найдены в списке Программ vw_LCU_SoftwareList. Значит процент найденного ПО 10%, или 10/100 = 0.1

вот такую одну ячейку мне и недо получить

% найденного ПО
10
22 июл 09, 15:03    [7445798]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
iljy
Member

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

select count(*), count(SoftwareNameId)
from
( ваш запрос)
22 июл 09, 15:04    [7445815]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
я не очен точно понел.. помоему это

select count(t.SoftwareNameID) as a, q.b,  (a/b) 
from  vw_LCU_SoftwareList t
left join
(SELECT
	count(scan.SoftwareNameID) as b
FROM 
	LCU_ScanResultsDetailed scan 
	inner JOIN vw_LCU_SoftwareList softlist ON (scan.[ProductName] = softlist.[Название])

where softlist.SoftwareNameID	 is not null) q

----
www.hramin.jino-net.ru
Картинка с другого сайта.
22 июл 09, 15:14    [7445895]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
alkersan
Member

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

и в результате я получу общее количество записей в табице, и количество записей с не NULL SoftwareNameID.

А как быть с PC? Каждая дополнительная рабочая станция вносит одну лишнюю запись.
Вот если бы было так:

ProductName PC SoftwareNameID
.NET Memory Profiler 3.1 W-11426 34
.NET Memory Profiler 3.1 w-12101 34
.NET Memory Profiler 3.1 W-20-174 34
.NET Pet Shop 4.0 W-10810 NULL


получается что процент найденного ПО 3/4 = 75%.

а на самом-то деле мы смогли идентифицировать лишь 1 из 2 записей - это ".NET Memory Profiler 3.1". И процент найденного ПО = 50%, а не 75%
22 июл 09, 15:15    [7445902]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
ererererer1
Guest
SELECT
scan.ProductName,
count(scan.ProductName) / (общее количество нужных програмных продуктов),
FROM
LCU_ScanResultsDetailed scan
LEFT OUTER JOIN vw_LCU_SoftwareList softlist ON (scan.[ProductName] = softlist.[Название])
GROUP BY ProductName
ORDER BY ProductName
22 июл 09, 15:15    [7445915]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
ererererer1
Guest
+ where SoftwareNameId IS NOT NULL
22 июл 09, 15:16    [7445927]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
iljy
Member

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

... вам надо для каждой проги выяснить, найдена она или нет, а потом посчитать процент? Точнее задачу ставьте!

select count(*), count(SoftwareNameId)
from
(
  select max(SoftwareNameId) SoftwareNameId
  from
  ( ваш запрос)
  group by ProductName
)
22 июл 09, 15:19    [7445953]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
alkersan
Member

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

А разве допустима такая конструкция:

SELECT *
FROM ( 
SELECT ...
)
22 июл 09, 15:26    [7446030]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select count(*), count(distinct SoftwareNameId)
from
( ваш запрос)


для спящего время бодрствования равносильно сну
22 июл 09, 15:26    [7446032]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2alkersan
если к подзапросу iljy добавить алиас, то сработает. иначе ошибку выдаст

для спящего время бодрствования равносильно сну
22 июл 09, 15:27    [7446041]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
alkersan
Member

Откуда:
Сообщений: 20
Алексей2003,

спасибо
22 июл 09, 15:28    [7446049]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
alkersan
Member

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

Спасибо. Работает
22 июл 09, 15:31    [7446070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите сгруппировать результат  [new]
iljy
Member

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

допустима. алиасы добавьте после скобок. а вообще - синтаксис можно и в хелпе посмотреть
22 июл 09, 15:32    [7446080]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить