SQL Server中如何将两行同PC同时间的磁盘数据合并为一行?
在SQL Server中合并同PC、同时间的多行磁盘信息为一行
针对你的场景,要把同一PC、同一采集时间(PostingDtime)下的C盘和D盘记录合并成一行,以下两种方法可以实现:
方法1:自连接(INNER JOIN)
利用表自身连接,匹配同一PC和同一PostingDtime的C盘与D盘记录:
SELECT c.PC, c.DriveName, c.AvailableSpace, c.TotalSpace, d.DriveName AS DriveName_D FROM YourTableName c INNER JOIN YourTableName d ON c.PC = d.PC AND c.PostingDtime = d.PostingDtime AND c.DriveName = 'C:\\' AND d.DriveName = 'D:\\'
逻辑说明
- 将表分别以
c(代表C盘)和d(代表D盘)为别名进行连接 - 连接条件限定为同一PC、同一采集时间,且分别对应C盘和D盘的记录
- 直接从C盘记录中取出空间信息,从D盘记录中取出盘符作为额外列
方法2:条件聚合(CASE + GROUP BY)
通过分组和条件判断,在同一行中聚合出C盘的空间信息和D盘的盘符:
SELECT PC, MAX(CASE WHEN DriveName = 'C:\\' THEN DriveName END) AS DriveName, MAX(CASE WHEN DriveName = 'C:\\' THEN AvailableSpace END) AS AvailableSpace, MAX(CASE WHEN DriveName = 'C:\\' THEN TotalSpace END) AS TotalSpace, MAX(CASE WHEN DriveName = 'D:\\' THEN DriveName END) AS DriveName_D FROM YourTableName GROUP BY PC, PostingDtime
逻辑说明
- 按
PC和PostingDtime分组,确保每个组对应同一PC同一时间的磁盘记录 - 用
CASE语句分别提取C盘的盘符、空间信息,以及D盘的盘符 - 用
MAX聚合函数(每个分组内对应盘符的记录只有一条,MAX/ MIN/ SUM都可)将值聚合到同一行
注意将代码中的YourTableName替换成你的实际表名,两种方法都能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Caspersky12
相关产品推荐
相关产品推荐

