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

Откуда:
Сообщений: 28
Парни помогите написать запрос.
Есть две таблицы:
id name Id soft
1 vasya 1 Nod32
2 yura 2 Symantec
нужно подсчитать количество строк машин у которых есть продукт nod32
и количество строк у которых нет этого продукта

в себы ничего но я незнаю как подсчитать количество строк которых нет :(
7 сен 11, 17:52    [11243174]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
iljy
Member

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

посчитать все и вычесть те, у которых есть. Что, пересдача?
7 сен 11, 18:29    [11243459]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Yuza,
SELECT SUM(CASE WHEN Soft='Nod32' THEN 1 ELSE 0 END) s1
,SUM(CASE WHEN Soft='Nod32' THEN 0 ELSE 1 END) s2
FROM ...
GROUP ...
7 сен 11, 18:29    [11243464]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

нет, не пересдача :) просто такого я ещё не делал
7 сен 11, 18:35    [11243490]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

Откуда:
Сообщений: 28
Спасибо, запрос заработал но не так как нужно :(
вот сам запрос
SELECT TOP (100) PERCENT SUM(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES,
SUM(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 0 ELSE 1 END) AS NO
FROM dbo.v_R_System INNER JOIN
dbo.v_GS_Mapped_Add_Remove_Programs ON dbo.v_R_System.ResourceID = dbo.v_GS_Mapped_Add_Remove_Programs.ResourceID
GROUP BY dbo.v_R_System.Netbios_Name0
результат в картинке

а если убрать сортировку то ближе к ожидаемому результату но почемуто количество машин без продукта показывает не тот результат

К сообщению приложен файл. Размер - 14Kb
8 сен 11, 13:54    [11247296]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
iljy
Member

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

оформите вопрос как положено.
8 сен 11, 14:02    [11247384]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Yuza,

SELECT  COUNT(*) cntSystem
      , SUM(t.YES) sYes
      , SUM(t.NO) sNo
FROM    (
          SELECT    MAX(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1
                             ELSE 0
                        END) AS YES
                  , 1 - MAX(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1
                                 ELSE 0
                            END) AS NO
          FROM      dbo.v_R_System
          INNER JOIN dbo.v_GS_Mapped_Add_Remove_Programs
          ON        dbo.v_R_System.ResourceID = dbo.v_GS_Mapped_Add_Remove_Programs.ResourceID
          GROUP BY  dbo.v_R_System.Netbios_Name0
        ) t
?
8 сен 11, 14:06    [11247423]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iljy
Yuza,

оформите вопрос как положено.

+1
* А то, ведь, мой хрустальный шар вполне может обмануть))).
8 сен 11, 14:07    [11247434]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
iljy
Yuza,

посчитать все и вычесть те, у которых есть. Что, пересдача?


+100500))
8 сен 11, 14:14    [11247512]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yuza
а если убрать сортировку то ближе к ожидаемому результату но почемуто количество машин без продукта показывает не тот результат

- не сортировку, а группировку наверное
- а количество не совпадает потому, что на одной машине наверное много программ, помимо той одной, что вы проверяете
8 сен 11, 14:19    [11247560]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

Откуда:
Сообщений: 28
СУПЕР!!!!!!!
то что нужно, правда немного поправил то что хотел )
8 сен 11, 14:20    [11247576]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

ну да, так и есть...
8 сен 11, 14:23    [11247598]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

ТЕБЕ особенное спасибо ! :)
8 сен 11, 14:24    [11247607]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

Откуда:
Сообщений: 28
ВСЕ супер!
но есть ещё одна проблемка, а именно результат вышеизложенного запроса мне нужно вывести в следующем виде
YES 111
NO 222
немного отредоктировал запрос:
SELECT 'YES' AS s, SUM(YES) AS Yes
FROM (SELECT MAX(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES
UNION ALL
SELECT 'NO' AS s, 1 - MAX(CASE WHEN dbo.v_GS_Mapped_Add_Remove_Programs.DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS NO
FROM dbo.v_R_System INNER JOIN
dbo.v_GS_Mapped_Add_Remove_Programs ON dbo.v_R_System.ResourceID = dbo.v_GS_Mapped_Add_Remove_Programs.ResourceID
GROUP BY dbo.v_R_System.Netbios_Name0) AS t

но выдаёт ошибку
где ошибка... непойму
8 сен 11, 16:34    [11249140]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT MAX(CASE WHEN DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES

и откуда этот запрос будет брать данные .
8 сен 11, 16:35    [11249153]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

Откуда:
Сообщений: 28
Glory,
добавил от куда, всеравно

SELECT MAX(CASE WHEN dbo.v_GS_Mapped_Add_Remove_Programs.DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES
8 сен 11, 16:38    [11249185]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yuza
Glory,
добавил от куда, всеравно

SELECT MAX(CASE WHEN dbo.v_GS_Mapped_Add_Remove_Programs.DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES

Добавили ? Все равно не вижу фразы FROM
8 сен 11, 16:39    [11249192]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Yuza,

-- дано так:
SELECT 1 YES, 2 NO

-- а терь так:
SELECT CASE WHEN n.n=1 THEN 'YES' ELSE 'NO' END RES_TYPE
,CASE WHEN n.n=1 THEN t.YES ELSE t.NO END RES
FROM (SELECT 1 YES, 2 NO) t
CROSS JOIN (SELECT 1 n UNION SELECT 2) n
8 сен 11, 16:41    [11249203]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

Я извиняюсь
но данный код куда вставить и вместо чего?
8 сен 11, 16:47    [11249254]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

сори но не совсем понял ваш пример.
это запрос просто выводит результат
YES 1
NO 2
8 сен 11, 17:15    [11249552]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

Пожалуйста, вы можете ткнуть пальцем где ошибка?
8 сен 11, 17:31    [11249682]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yuza
Glory,

Пожалуйста, вы можете ткнуть пальцем где ошибка?

где FROM в вашем запросе ?
8 сен 11, 18:56    [11250189]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
Yuza
Member

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

ну так данное выражение и есть FROM или я ишибаюсь?
9 сен 11, 13:11    [11253405]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Yuza
Glory,

ну так данное выражение и есть FROM или я ишибаюсь?
Вот тут:
SELECT MAX(CASE WHEN dbo.v_GS_Mapped_Add_Remove_Programs.DisplayName0 LIKE 'Symantec Endpoint Protection' THEN 1 ELSE 0 END) AS YES
Из каких таблиц берутся данные???

Вы бы использовали тег SRC в форуме, нормально форматировали текст запроса, использовали бы алиасы - и скорость разработки выросла бы в несколько раз :-)
9 сен 11, 13:18    [11253468]     Ответить | Цитировать Сообщить модератору
 Re: подсчетом строк  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Yuza
kDnZP,

сори но не совсем понял ваш пример.
это запрос просто выводит результат
YES 1
NO 2

А что именно в нем не понятно? Сложно подставить предыдущий запрос в подзапрос (...) t?
9 сен 11, 13:27    [11253563]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить