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

SQL Server下为数据加虚拟标识并统计诊断编码各位置次数问询

解决方案

方式1:基于你原本的UNPIVOT语法扩展实现

你原来的UNPIVOT逻辑已经可以拿到每个诊断编码对应的原始列位置,只需要在后续分组聚合的时候做条件计数即可,代码如下:

SELECT
    Diag AS Diagnosis,
    COUNT(*) AS [Total Count],
    SUM(CASE WHEN ColumnALL = 'Diagnosis1' THEN 1 ELSE 0 END) AS [Diag1 Count],
    SUM(CASE WHEN ColumnALL = 'Diagnosis2' THEN 1 ELSE 0 END) AS [Diag2 Count],
    SUM(CASE WHEN ColumnALL = 'Diagnosis3' THEN 1 ELSE 0 END) AS [Diag3 Count],
    SUM(CASE WHEN ColumnALL = 'Diagnosis 4' THEN 1 ELSE 0 END) AS [Diag4 Count]
FROM 你的实际表名
UNPIVOT (
    Diag FOR ColumnALL IN (Diagnosis1, Diagnosis2, Diagnosis3, [Diagnosis 4])
) AS unpvt
GROUP BY Diag
ORDER BY Diag

注意原表的第4个诊断列名带空格,需要用[]包裹避免语法报错。

方式2:无需行转列,直接条件聚合(性能更优)

如果不需要中间行转列的结果,可以直接对原表按诊断编码维度聚合,代码更简洁:

SELECT
    Diagnosis,
    SUM(CountVal) AS [Total Count],
    SUM(Diag1Flag) AS [Diag1 Count],
    SUM(Diag2Flag) AS [Diag2 Count],
    SUM(Diag3Flag) AS [Diag3 Count],
    SUM(Diag4Flag) AS [Diag4 Count]
FROM (
    SELECT Diagnosis1 AS Diagnosis, 1 AS CountVal, 1 AS Diag1Flag, 0 AS Diag2Flag, 0 AS Diag3Flag, 0 AS Diag4Flag FROM 你的实际表名 WHERE Diagnosis1 IS NOT NULL
    UNION ALL
    SELECT Diagnosis2 AS Diagnosis, 1 AS CountVal, 0 AS Diag1Flag, 1 AS Diag2Flag, 0 AS Diag3Flag, 0 AS Diag4Flag FROM 你的实际表名 WHERE Diagnosis2 IS NOT NULL
    UNION ALL
    SELECT Diagnosis3 AS Diagnosis, 1 AS CountVal, 0 AS Diag1Flag, 0 AS Diag2Flag, 1 AS Diag3Flag, 0 AS Diag4Flag FROM 你的实际表名 WHERE Diagnosis3 IS NOT NULL
    UNION ALL
    SELECT [Diagnosis 4] AS Diagnosis, 1 AS CountVal, 0 AS Diag1Flag, 0 AS Diag2Flag, 0 AS Diag3Flag, 1 AS Diag4Flag FROM 你的实际表名 WHERE [Diagnosis 4] IS NOT NULL
) AS t
GROUP BY Diagnosis
ORDER BY Diagnosis

两种方式执行后得到的结果和你期望的输出结构完全一致,可根据实际使用场景选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:04