Member 13751304 Ответов: 4

Sql запрос показать в одной строке


Попытка показать на одной строке

В настоящее время выглядит так
MS18-03-W10 NULL 5526
MS18-03-W10 24249 NULL
Хотелось бы
MS18-03-W10 24249 5526


Что я уже пробовал:

Select Distinct p.name
,Case
When i.installed = '1' then count (c.name)
End 
,Case
When i.installed = '0' then count (c.name)
End 
From vRM_Software_Bulletin_Item_ExactType p
left join vPMWindows_ComplianceReportsDrilldown i on i.SoftwareBulletin = p.Guid
left Join vcomputer  c on c.guid = i._ResourceGuid
Where 
i.ReleaseDate > '2017'
AND
i.BulletinState = '1'
and
p.name = 'MS18-03-W10'
group by p.name, i.Installed

4 Ответов

Рейтинг:
1

Member 13751304

Закрыть но не бросить то что я ищу

Мне нужно иметь на одном ряду

Bulletin Name 	Installed	Not Installed
MS18-03-W10	17952	        563
MS18-03-MR7	18563	        2056


Рейтинг:
1

Wendelius

Как уже упоминалось в предыдущем решении, использование оконных функций-это одна из возможностей, а другая-просто суммирование значений внешнего запроса. Что-то вроде

SELECT sub1.Name,
       SUM(sub1.Installed),
       SUM(sub1.NotInstalled)
FROM (SELECT p.name,
             CASE WHEN i.installed = '1' THEN COUNT(c.name) END AS Installed,
             CASE WHEN i.installed = '0' THEN COUNT(c.name) END AS NotInstalled
      FROM vRM_Software_Bulletin_Item_ExactType p
      LEFT JOIN vPMWindows_ComplianceReportsDrilldown i ON i.SoftwareBulletin = p.Guid
      LEFT JOIN vcomputer c ON c.guid = i._ResourceGuid
      WHERE i.ReleaseDate > '2017'
      AND i.BulletinState = '1'
      AND p.name = 'MS18-03-W10'
     GROUP BY p.name, i.Installed) AS sub1 


Рейтинг:
0

#realJSOP

Попробовать это:

SELECT p.name,
       SUM(CASE WHEN i.installed = '1' THEN 1 ELSE 0 END) AS counter
FROM   vRM_Software_Bulletin_Item_ExactType AS p
LEFT JOIN vPMWindows_ComplianceReportsDrilldown AS i ON i.SoftwareBulletin = p.Guid
LEFT JOIN vcomputer AS c ON c.guid = i._ResourceGuid
WHERE i.ReleaseDate > '2017'
AND   i.BulletinState = '1'
AND   p.name = 'MS18-03-W10'
GROUP BY p.name, i.Installed 


Незначительная гнида - мне нравится делать все зарезервированные слова SQL полностью заглавными, чтобы они выделялись немного лучше. Я также использую "как", когда указываю псевдонимы, потому что это просто хорошая привычка.

Кроме того, вам не нужно DISTINCT если вы используете GROUP BY.


Member 13751304

Мне нужно иметь на одном ряду
Имя Бюллетеня Установлено Не Установлено
MS18-03-W10 17952 563
MS18-03-MR7 18563 2056

Рейтинг:
0

Santosh kumar Pithani

Select Distinct 
        p.name
       ,SUM(Case When i.installed = '1' then 1 End)
           OVER(PARTITION BY p.name ORDER BY p.name) AS [Installed]	
       ,SUM(Case When i.installed = '0' then  1 End)
           OVER(PARTITION BY p.name ORDER BY p.name) AS [Not Installed] 

  From vRM_Software_Bulletin_Item_ExactType p

  left join vPMWindows_ComplianceReportsDrilldown i 
       on i.SoftwareBulletin = p.Guid
  left Join vcomputer c on c.guid = i._ResourceGuid

 Where 

 i.ReleaseDate > '2017'
 AND
 i.BulletinState = '1'