Запрос данных SQL - отображение количества корректно - PullRequest
0 голосов
/ 04 июня 2019

У меня есть база данных SQL, в которой хранятся данные о машинах и пользователях, использующих программное обеспечение. мне нужно создать запрос, чтобы я мог отобразить все соединения в определенный день (сегодня) и сгруппировать их по уровню года.

Таблица WindowsLogs:

Date
Time
Username
Year
AppV
IPaddress
MAC
DeviceName
Antivirus
5gigCompat

Это насколько я получил:

select WindowsLogs.Year,count(*)
From WindowsLogs
Where WindowsLogs.Date=cast(convert(varchar(10), getdate(), 105) as datetime)
group by WindowsLogs.Year

В настоящее время я получаю это:

Year | no name
   7 |  5
   8 |  2
  11 |  3

Но в идеале я хочу, чтобы данные отображались следующим образом:

Year 07 | XX
Year 08 | XX
Year 09 | XX
Year 10 | XX
Year 11 | XX
Year 12 | XX

Ответы [ 3 ]

0 голосов
/ 04 июня 2019

исправили это с помощью следующего:

SELECT (SELECT COUNT(*) AS NumberOfTransactions 
FROM WindowsLogs
WHERE WindowsLogs.Date=cast(convert(varchar(10), getdate(), 105) as datetime) 
and WindowsLogs.Year = 7) as Year7today;

и продолжается для каждого уровня года

0 голосов
/ 04 июня 2019

Используйте CONCAT и FORMAT

SELECT CONCAT("YEAR ", FORMAT(WindowsLogs.Year, "00")), FORMAT(COUNT(*), "00")
FROM WindowsLogs
WHERE WindowsLogs.Date=cast(convert(varchar(10), getdate(), 105) as datetime)
GROUP BY WindowsLogs.Year
0 голосов
/ 04 июня 2019

Предположительно, вы, похоже, хотите left join, что-то вроде этого:

select v.str, count(wl.year)
from (values ('Year 07', 7),
             ('Year 08', 8),
             ('Year 09', 9),
             ('Year 10', 10),
             ('Year 11', 11),
             ('Year 12', 12)
     ) v(str, yr) left join
     WindowsLogs wl
     on wl.date = convert(date, getdate()) and
        wl.year = v.yr
group by v.str
order by v.str;
...