【问题标题】:Transpose of column to row [closed]将列转置为行[关闭]
【发布时间】:2021-04-06 02:31:56
【问题描述】:
SELECT
   -- '<=19'AS Age_Range,
   case when gender = 1 then 'male'
   when gender = 2 then 'female' 
   end as gender_cat,
SUM(CASE WHEN hypertension= '1' THEN 1 ELSE 0 END) AS hypertension,
SUM(CASE WHEN chronic_cardiac_disease= '1' THEN 1 ELSE 0 END) AS chronic_cardiac_disease
FROM form where gender is not null
group by gender_cat

输出为 Gender_Cat |高血压|慢性心脏疾病

我需要将列转换为行以获得所需的输出:疾病 |男 |女性。

任何帮助将不胜感激!!!

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 如果患者同时患有高血压和心脏病怎么办?

标签: mysql sql count pivot unpivot


【解决方案1】:

如果某个患者可能同时患有这两种疾病,那么我会推荐union all

select 'hypertension' as disease, sum(gender = 1) as male, sum(gender = 2) as female
from form
where hypertension = 1
select 'chronic_cardiac_disease', sum(gender = 1), sum(gender = 2)
from form
where chronic_cardiac_disease = 1

在最近的 MySQL 版本中,您将使用横向连接:

select x.disease, sum(f.gender = 1) as male, sum(f.gender = 2) as female
from form f
cross join lateral (
    select 'hypertension' as disease , hypertension as flag
    union all select 'chronic_cardiac_disease', chronic_cardiac_disease
) x
where x.flag = 1
group by x.disease

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2023-03-27
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多