mysql - 如果它们对同一个人 ID 重复,我需要在不同列中显示行值
问题描述
现在我有这样的输出,但我需要以不同的方式输出
Peron_id Diagnosis1 doagnosis2 diagnosis3 diagnosis4
1 fever
2 fever
2 backpain
2 UTI
我需要这样的输出
Peron_id Diagnosis1 doagnosis2 diagnosis3 diagnosis4
1 fever
2 fever backpain UTI
请帮助我。
我现在构建了完整的查询并且它显示了一些错误(操作数应该包含 1 列。我将查询粘贴在下面。请帮助我
SELECT
visits.id as VisitId,
visits.person_id as MemberId,
dept.name as Specialty,
visits.date as VisitDate,
visits.followup_to_visit_id as FollowToVisitID,
visits.chief_complaint as ChiefComplaint1,
visits.chief_complaint_2 as ChiefComplaint2,
visits.chief_complaint_3 as ChiefComplaint3,
visits.valid_state as ValidStatus,
visits.clinic_type as ClinicType,
visits.illness_duration as IllnessDuration,
vitals.temperature_f as Temp,
vitals.pulse as Pulse,
vitals.respiratory_rate as RespRate,
vitals.bp_systolic as BPSystolic,
vitals.bp_diastolic as BPDiastolic,
vitals.height_cm as HeightCms,
vitals.weight_kg as WeightKgs,
vitals.waist_cm as WaistCms,
vitals.hip_cm as HipCms,
referral.referred_to_provider as ReferredOut,
visits.provider_id as DoctorId,
prov.full_name as DoctorName,
prov.registration_number as DoctorRegNum,
prov.qualification as DoctorQual,
provloc.name as VisitUphc,
tk.name as VisitUlb,
districts.name as VisitDistrict,
"TN" as VisitState,
provloc.cachment_code as VisitCatchment,
visits.entry_date as VisitEntryDate,
(visits.end_time - visits.begin_time) as VisitEntryTimeTaken,
visits.created_date as VisitCreateDt,
visits.last_modified_date as VisitLastModDt,
(Select visit_id,
max(case when i=1 then diagnosis end)as provisional_diagnosis_1,
max(case when i=2 then diagnosis end)as provisional_diagnosis_2,
max(case when i=3 then diagnosis end)as provisional_diagnosis_3,
max(case when i=4 then diagnosis end)as provisional_diagnosis_4
from
(
select visit_id, diagnosis as diagnosis,
@i :=IF(@iter=visit_id,@i+1,1)as i,
@iter :=visit_id
from visit_diagnosis_entries v1
join (select @iter :=0) v2
) vv)
FROM
visits
LEFT JOIN visit_vitals vitals ON vitals.visit_id = visits.id
LEFT JOIN visit_referral_entries referral ON referral.visit_id = visits.id
LEFT JOIN visit_diagnosis_entries diag ON diag.visit_id = visits.id
INNER JOIN providers prov ON prov.id = visits.provider_id
INNER JOIN provider_locations provloc ON provloc.id = visits.provider_location_id
INNER JOIN talukas tk ON tk.id = provloc.taluka_id
INNER JOIN districts ON districts.id = provloc.district_id
INNER JOIN departments dept ON dept.id = visits.department_id limit 5;
以前我用一张表解释过,现在我需要所有的列,另外还需要这些列。
解决方案
如果您使用的是 MySQL 8+,那么我们可以在以下帮助下尝试枢轴查询ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Peron_id ORDER BY Diagnosis) rn
FROM yourTable
)
SELECT
Peron_id,
MAX(CASE WHEN rn = 1 THEN Diagnosis END) AS Diagnosis1,
MAX(CASE WHEN rn = 2 THEN Diagnosis END) AS Diagnosis2,
MAX(CASE WHEN rn = 3 THEN Diagnosis END) AS Diagnosis3,
MAX(CASE WHEN rn = 4 THEN Diagnosis END) AS Diagnosis4
FROM cte
GROUP BY
Peron_id;
推荐阅读
- c# - C# XML 反序列化不返回列表类型的元素
- ruby-on-rails - Rails5:如何从 API 数据格式化货币值
- javascript - 函数式编程函数节奏
- python - 沿特定维度从 ndarray 中减去矩阵而不重塑
- spring - 创建名为“jpaContext”的 bean 时出错:通过构造函数参数 0 表示的不满足依赖关系
- c# - 将 Unity 中的 XAML (WPF) 应用与 MixedRealityToolkit 相结合
- mapbox - Mapbox Heatmap 仅街道
- json - Node.JS - 将多个 JSON 文件的内容输出到控制台
- google-analytics - 谷歌分析——测量放弃后的回头客
- axios - 如何在 axios PUT 请求中传递参数?