[英]MYSQL different columns for corresponding person values in one row with different titles
我有7個表格來獲取數據。下面列出的表格
SELECT
visits.policy_id,persons.full_name,visits.person_id,visits.date,
(CASE WHEN test_types.name = 'Blood Glucose (Fasting)' THEN visit_test_entries.result ELSE " " END) AS BSL_F,
(CASE WHEN test_types.name = 'Blood Glucose (Post Prandial ) 2 hrs' THEN visit_test_entries.result ELSE " " END) AS BSL_PP,
(CASE WHEN test_types.name = 'Triglycerides (Fasting)' THEN visit_test_entries.result ELSE " " END) AS TGL,
(CASE WHEN test_types.name = 'Low Density Lipoprotein (LDL)' THEN visit_test_entries.result ELSE " " END) AS LDL,
(CASE WHEN test_types.name = 'HDL (Fasting)' THEN visit_test_entries.result ELSE " " END) AS HDL,
(CASE WHEN test_types.name = 'Total Cholesterol (Fasting)' THEN visit_test_entries.result ELSE " " END) AS Total_Cholesterol
FROM
visits,provider_locations,providers,visit_test_entries,test_types,persons,households hh
WHERE
visits.provider_location_id=provider_locations.id
AND visits.provider_id=providers.id
AND visits.id=visit_test_entries.visit_id
AND visit_test_entries.test_type_id=test_types.id
AND visits.person_id=persons.id
AND persons.household_id=hh.id
AND visits.date >="2016-06-01"
AND visits.provider_location_id=1
AND visits.valid_state='valid'
現在我得到這樣的輸出
--------------------------------------------------------------------------|
policy_id| full_name|person_id|date |BSL_F|BSL_PP|TGL|LDL|HDL|Tot_Cho|
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02|123 | | | | | |
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02| |435 | | | | |
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02| | |45 | | | |
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02| | | |78 | | |
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02| | | | |120| |
---------|----------|---------|----------|-----|------|---|---|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02| | | | | |170 |
--------------------------------------------------------------------------|
但是我需要這樣的輸出
--------------------------------------------------------------------------|
policy_id| full_name|person_id|date |BSL_F|BSL_PP|TGL|LDL|HDL|Tot_Cho|
---------|----------|---------|----------|-----|------|-------|---|-------|
AN00234 | Rajesh | 2309330 |2017-04-02|123 | 435 |45 |78 |120|170 |
--------------------------------------------------------------------------|
將每個個案包裝在max語句中,並按未匯總的其他字段分組。
不是舊式ancsii的粉絲加入,而是...
之所以可行,是因為我們知道max(or min)將由於group by返回相同的值。
SELECT visits.policy_id
, persons.full_name
, visits.person_id
, visits.date
, max(CASE WHEN test_types.name = 'Blood Glucose (Fasting)' THEN visit_test_entries.result ELSE " " END) AS BSL_F
, max(CASE WHEN test_types.name = 'Blood Glucose (Post Prandial ) 2 hrs' THEN visit_test_entries.result ELSE " " END) AS BSL_PP
, max(CASE WHEN test_types.name = 'Triglycerides (Fasting)' THEN visit_test_entries.result ELSE " " END) AS TGL
, max(CASE WHEN test_types.name = 'Low Density Lipoprotein (LDL)' THEN visit_test_entries.result ELSE " " END) AS LDL
, max(CASE WHEN test_types.name = 'HDL (Fasting)' THEN visit_test_entries.result ELSE " " END) AS HDL
, max(CASE WHEN test_types.name = 'Total Cholesterol (Fasting)' THEN visit_test_entries.result ELSE " " END) AS Total_Cholesterol
FROM visits
, provider_locations
, providers
, visit_test_entries
, test_types
, persons
, households hh
WHERE visits.provider_location_id=provider_locations.id
AND visits.provider_id=providers.id
AND visits.id=visit_test_entries.visit_id
AND visit_test_entries.test_type_id=test_types.id
AND visits.person_id=persons.id
AND persons.household_id=hh.id
AND visits.date >="2016-06-01"
AND visits.provider_location_id=1
AND visits.valid_state='valid'
GROUP BY visits.policy_id
, persons.full_name
, visits.person_id
, visits.date
我也不是喜歡使用“”作為占位符,因此我寧願完全不要使用else,因此其值為<null>
。
不是最好的,但是最簡單的方法是子選擇
SELECT
visits.policy_id,persons.full_name,visits.person_id,visits.date,
( SELECT
test_types.result
FROM
test_types
WHERE 1
AND visit_test_entries.test_type_id = test_types.id
AND test_types.name = 'Low Density Lipoprotein (LDL)'
) AS LDL
//... and so on
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.