我怎样才能做到这一点 query/consultation?
How can i make this query/consultation?
我正在尝试生成一个 returns 和 table 类似的查询(每个版本只出现一次,例如 Windows 7)
但是,我只能生成这个(同一版本多次出现,例如 Windows 7 Enterprise,Windows 7 Home,...)
这是我的代码
SELECT osname as 'Sistema Operativo' , count(osname) as 'Total UC',
COUNT(CASE WHEN TAG = 'VREG-DI' THEN 1 ELSE NULL END) as 'VRA-BIB'
from hardware h, accountinfo
where h.ID = accountinfo.HARDWARE_ID
group by osname
我要添加名字"Windows 7"下的所有"Windows 7 Enterprise/Starter/..."。
这会生成 de table 'Hardware'
CREATE TABLE IF NOT EXISTS `hardware` (
`ID` int(11) NOT NULL,
`DEVICEID` varchar(255) NOT NULL,
`NAME` varchar(255) DEFAULT NULL,
`WORKGROUP` varchar(255) DEFAULT NULL,
`USERDOMAIN` varchar(255) DEFAULT NULL,
`OSNAME` varchar(255) DEFAULT NULL,
`OSVERSION` varchar(255) DEFAULT NULL,
`OSCOMMENTS` varchar(255) DEFAULT NULL,
`PROCESSORT` varchar(255) DEFAULT NULL,
`PROCESSORS` int(11) DEFAULT '0',
`PROCESSORN` smallint(6) DEFAULT NULL,
`MEMORY` int(11) DEFAULT NULL,
`SWAP` int(11) DEFAULT NULL,
`IPADDR` varchar(255) DEFAULT NULL,
`DNS` varchar(255) DEFAULT NULL,
`DEFAULTGATEWAY` varchar(255) DEFAULT NULL,
`ETIME` datetime DEFAULT NULL,
`LASTDATE` datetime DEFAULT NULL,
`LASTCOME` datetime DEFAULT NULL,
`QUALITY` decimal(7,4) DEFAULT NULL,
`FIDELITY` bigint(20) DEFAULT '1',
`USERID` varchar(255) DEFAULT NULL,
`TYPE` int(11) DEFAULT NULL,
`DESCRIPTION` varchar(255) DEFAULT NULL,
`WINCOMPANY` varchar(255) DEFAULT NULL,
`WINOWNER` varchar(255) DEFAULT NULL,
`WINPRODID` varchar(255) DEFAULT NULL,
`WINPRODKEY` varchar(255) DEFAULT NULL,
`USERAGENT` varchar(50) DEFAULT NULL,
`CHECKSUM` bigint(20) unsigned DEFAULT '262143',
`SSTATE` int(11) DEFAULT '0',
`IPSRC` varchar(255) DEFAULT NULL,
`UUID` varchar(255) DEFAULT NULL,
`ARCH` varchar(10) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=24661 DEFAULT CHARSET=latin1;
这是 table 'accountinfo'
CREATE TABLE IF NOT EXISTS `accountinfo` (
`HARDWARE_ID` int(11) NOT NULL,
`TAG` varchar(255) DEFAULT 'NA',
`fields_3` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
您有两个选择:
1) 在 SQL 上编写公式以仅检索相关的操作系统部分 在您的查询中创建一个新字段并按其分组。
2) 创建一个包含两列的新 table:OS 真实姓名和 OS 组名,如下所示:
RealOSName OSGroupName
-------------------------------- -----------------------
Microsoft Windows 7 Professional Windows 7
Microsoft Windows 7 Home Basic Windows 7
Microsoft Windows 7 Home Premium Windows 7
然后按 OSGrupName 对您的查询进行分组(对我来说是最佳选择)
osnamez = CASE WHEN PATINDEX('Windows' + '7',osname) > 0 THEN 'Windows 7'
ELSE osname
自我解释。
检查结果的内容是否在其名称中包含 Windows 7 然后它只会回显 Windows 7
另一个解决方案:
PHP:
if(preg_match('/^[windows 7]*$/', $row['osname?']))
$row['osname?']= "Windows 7";
^不确定是不是这个
但只需检查
preg_match
有一个。
我喜欢 ericpap 的第二个建议,但如果可能的话,我会采取稍微不同的方向,通过向您的硬件添加一个额外的列 table "osGroup" 或类似的
osGroup table
-----
groupId int primary key identity
groupName varchar(100)
因此它可以填充如下数据:
groupId groupName
-----
1 Windows 7
2 Windows 8
3 Linux
4 Mac
等等
然后你的硬件 table 看起来像(剪掉几列
osName osGroup
-------
Mac OS X 4
Miscrosoft Windows 7 Professional 1
等等
这将回答您的特定问题(或至少接近它 - 我不熟悉已弃用的逗号连接语法):
SELECT groupName as 'Sistema Operativo' , count(groupName) as 'Total UC',
COUNT(CASE WHEN TAG = 'VREG-DI' THEN 1 ELSE NULL END) as 'VRA-BIB'
from hardware h, accountinfo
inner join osGroup o on h.groupId = o.groupId
where h.ID = accountinfo.HARDWARE_ID
group by groupName
使用这种方法,您将面临用适当的组填充数据的挑战,尽管它更加规范化。
我正在尝试生成一个 returns 和 table 类似的查询(每个版本只出现一次,例如 Windows 7)
但是,我只能生成这个(同一版本多次出现,例如 Windows 7 Enterprise,Windows 7 Home,...)
这是我的代码
SELECT osname as 'Sistema Operativo' , count(osname) as 'Total UC',
COUNT(CASE WHEN TAG = 'VREG-DI' THEN 1 ELSE NULL END) as 'VRA-BIB'
from hardware h, accountinfo
where h.ID = accountinfo.HARDWARE_ID
group by osname
我要添加名字"Windows 7"下的所有"Windows 7 Enterprise/Starter/..."。
这会生成 de table 'Hardware'
CREATE TABLE IF NOT EXISTS `hardware` (
`ID` int(11) NOT NULL,
`DEVICEID` varchar(255) NOT NULL,
`NAME` varchar(255) DEFAULT NULL,
`WORKGROUP` varchar(255) DEFAULT NULL,
`USERDOMAIN` varchar(255) DEFAULT NULL,
`OSNAME` varchar(255) DEFAULT NULL,
`OSVERSION` varchar(255) DEFAULT NULL,
`OSCOMMENTS` varchar(255) DEFAULT NULL,
`PROCESSORT` varchar(255) DEFAULT NULL,
`PROCESSORS` int(11) DEFAULT '0',
`PROCESSORN` smallint(6) DEFAULT NULL,
`MEMORY` int(11) DEFAULT NULL,
`SWAP` int(11) DEFAULT NULL,
`IPADDR` varchar(255) DEFAULT NULL,
`DNS` varchar(255) DEFAULT NULL,
`DEFAULTGATEWAY` varchar(255) DEFAULT NULL,
`ETIME` datetime DEFAULT NULL,
`LASTDATE` datetime DEFAULT NULL,
`LASTCOME` datetime DEFAULT NULL,
`QUALITY` decimal(7,4) DEFAULT NULL,
`FIDELITY` bigint(20) DEFAULT '1',
`USERID` varchar(255) DEFAULT NULL,
`TYPE` int(11) DEFAULT NULL,
`DESCRIPTION` varchar(255) DEFAULT NULL,
`WINCOMPANY` varchar(255) DEFAULT NULL,
`WINOWNER` varchar(255) DEFAULT NULL,
`WINPRODID` varchar(255) DEFAULT NULL,
`WINPRODKEY` varchar(255) DEFAULT NULL,
`USERAGENT` varchar(50) DEFAULT NULL,
`CHECKSUM` bigint(20) unsigned DEFAULT '262143',
`SSTATE` int(11) DEFAULT '0',
`IPSRC` varchar(255) DEFAULT NULL,
`UUID` varchar(255) DEFAULT NULL,
`ARCH` varchar(10) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=24661 DEFAULT CHARSET=latin1;
这是 table 'accountinfo'
CREATE TABLE IF NOT EXISTS `accountinfo` (
`HARDWARE_ID` int(11) NOT NULL,
`TAG` varchar(255) DEFAULT 'NA',
`fields_3` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
您有两个选择:
1) 在 SQL 上编写公式以仅检索相关的操作系统部分 在您的查询中创建一个新字段并按其分组。
2) 创建一个包含两列的新 table:OS 真实姓名和 OS 组名,如下所示:
RealOSName OSGroupName
-------------------------------- -----------------------
Microsoft Windows 7 Professional Windows 7
Microsoft Windows 7 Home Basic Windows 7
Microsoft Windows 7 Home Premium Windows 7
然后按 OSGrupName 对您的查询进行分组(对我来说是最佳选择)
osnamez = CASE WHEN PATINDEX('Windows' + '7',osname) > 0 THEN 'Windows 7'
ELSE osname
自我解释。
检查结果的内容是否在其名称中包含 Windows 7 然后它只会回显 Windows 7
另一个解决方案:
PHP:
if(preg_match('/^[windows 7]*$/', $row['osname?']))
$row['osname?']= "Windows 7";
^不确定是不是这个 但只需检查
preg_match
有一个。
我喜欢 ericpap 的第二个建议,但如果可能的话,我会采取稍微不同的方向,通过向您的硬件添加一个额外的列 table "osGroup" 或类似的
osGroup table
-----
groupId int primary key identity
groupName varchar(100)
因此它可以填充如下数据:
groupId groupName
-----
1 Windows 7
2 Windows 8
3 Linux
4 Mac
等等
然后你的硬件 table 看起来像(剪掉几列
osName osGroup
-------
Mac OS X 4
Miscrosoft Windows 7 Professional 1
等等
这将回答您的特定问题(或至少接近它 - 我不熟悉已弃用的逗号连接语法):
SELECT groupName as 'Sistema Operativo' , count(groupName) as 'Total UC',
COUNT(CASE WHEN TAG = 'VREG-DI' THEN 1 ELSE NULL END) as 'VRA-BIB'
from hardware h, accountinfo
inner join osGroup o on h.groupId = o.groupId
where h.ID = accountinfo.HARDWARE_ID
group by groupName
使用这种方法,您将面临用适当的组填充数据的挑战,尽管它更加规范化。