You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:25