[英]SQL data query - displaying count correctly
我有一个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
据推测,你似乎想要一个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;
使用以下方法解决此问题:
SELECT (SELECT COUNT(*) AS NumberOfTransactions
FROM WindowsLogs
WHERE WindowsLogs.Date=cast(convert(varchar(10), getdate(), 105) as datetime)
and WindowsLogs.Year = 7) as Year7today;
并继续每年的水平
使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.