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

求助:SQL Server 2012如何将多行数据合并为一行

嘿,我来帮你搞定这个SQL统计的需求!

先理清楚已知信息

根据你提供的内容,我整理下关键信息:

  • 你使用的是SQL Server 2012
  • 你的表格包含这些列:PatientId(患者ID)、VisitDate(访视日期)、VisitType(访视类型)
  • 访视类型的可选值:Completed、Bumped、No Show、Late Cancelled、Cancelled
  • 你需要的输出是按VisitDate分组,每个访视类型作为单独列,统计对应日期下各类型的访视数量(也就是行转列的统计结果)
解决方案

在SQL Server 2012里,有两种简单的方式可以实现这个需求,我都给你列出来:

方法1:使用PIVOT运算符

这种方式是SQL里专门用来行转列的语法,代码如下:

SELECT 
    VisitDate,
    ISNULL(Completed, 0) AS Completed,
    ISNULL(Bumped, 0) AS Bumped,
    ISNULL([No Show], 0) AS [No Show],
    ISNULL([Late Cancelled], 0) AS [Late Cancelled],
    ISNULL(Cancelled, 0) AS Cancelled
FROM (
    SELECT 
        VisitDate,
        VisitType,
        COUNT(PatientId) AS VisitCount
    FROM YourTableName  -- 这里替换成你的实际表名
    GROUP BY VisitDate, VisitType
) AS SourceTable
PIVOT (
    SUM(VisitCount)
    FOR VisitType IN (
        Completed, 
        Bumped, 
        [No Show], 
        [Late Cancelled], 
        Cancelled
    )
) AS PivotTable
ORDER BY VisitDate;

方法2:条件聚合(更灵活,兼容更早版本)

如果你觉得PIVOT有点难理解,条件聚合的写法更直观,代码如下:

SELECT 
    VisitDate,
    SUM(CASE WHEN VisitType = 'Completed' THEN 1 ELSE 0 END) AS Completed,
    SUM(CASE WHEN VisitType = 'Bumped' THEN 1 ELSE 0 END) AS Bumped,
    SUM(CASE WHEN VisitType = 'No Show' THEN 1 ELSE 0 END) AS [No Show],
    SUM(CASE WHEN VisitType = 'Late Cancelled' THEN 1 ELSE 0 END) AS [Late Cancelled],
    SUM(CASE WHEN VisitType = 'Cancelled' THEN 1 ELSE 0 END) AS Cancelled
FROM YourTableName  -- 这里替换成你的实际表名
GROUP BY VisitDate
ORDER BY VisitDate;

小提示

  • 一定要把代码里的YourTableName换成你实际使用的表格名称哦;
  • 我用了ISNULL(方法1)和条件判断里的ELSE 0(方法2),这样就算某一天没有某个类型的访视,也会显示0而不是NULL,和你期望的输出完全匹配;
  • 最后加了ORDER BY VisitDate,保证结果是按日期排序的。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:33