簡體   English   中英

MYSQL在一行中具有不同標題的對應人員值的不同列

[英]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'
  1. 造訪
  2. 提供商位置
  3. 提供者
  4. visit_test_entries
  5. test_types
  6. 家庭

現在我得到這樣的輸出

--------------------------------------------------------------------------|
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM