簡體   English   中英

SQL查詢,對於表A中的每一行,應以逗號分隔結果的形式獲取多個行值(一列)

[英]SQL Query, for each row in table A should fetch multiple row values (one column) as comma separated in result

下面,我描述這些表並解釋我要編寫的查詢,

訪問表

+--------------+------------------+--------+-------+-----------+
|   FIELD      |      TYPE        | NULL   | KEY   | DEFAULT   |
+--------------+------------------+--------+-------+-----------+
| VISIT_ID     | VARCHAR(200)     | NO     | UNI   | NULL      |
| PATIENT      | VARCHAR(45)      | NO     | PRI   | NULL      |
| DOCTOR       | VARCHAR(45)      | NO     | PRI   | NULL      |
| COMPLAINTS   | CLOB(2147483647) | YES    |       | NULL      |
| OBSERVATIONS | CLOB(2147483647) | YES    |       | NULL      |
| REPORTS      | VARCHAR(500)     | YES    |       | NULL      |
| START        | TIMESTAMP(23)    | NO     | PRI   | NULL      |
| END          | TIMESTAMP(23)    | NO     | PRI   | NULL      |
| CREATED_ON   | DATE(8)          | NO     | PRI   | NULL      |
| UPDATED_ON   | DATE(8)          | YES    |       | NULL      |
| STATUS       | VARCHAR(200)     | NO     | PRI   | NULL      |
| TYPE         | VARCHAR(200)     | YES    |       | NULL      |
| DESCRIPTION  | VARCHAR(200)     | NO     |       | NULL      |
+--------------+------------------+--------+-------+-----------+

和高亮表

+----------+------------------+--------+-------+-----------+
| FIELD    |      TYPE        | NULL   | KEY   | DEFAULT   |
+----------+------------------+--------+-------+-----------+
| VISIT_ID | VARCHAR(200)     | NO     |       | NULL      |
| MATTER   | CLOB(2147483647) | NO     |       | NULL      |
+----------+------------------+--------+-------+-----------+

現在我要查詢的是,對於訪問表中的每個VISIT,我想在Highlight表中獲取多個記錄。 我可以使用內部聯接,但是它給我重復的訪問記錄(請參見下面的SQL)

select "PUBLIC"."VISIT"."VISIT_ID", "PUBLIC"."VISIT"."DESCRIPTION", "PUBLIC"."VISIT"."START", "PUBLIC"."HIGHLIGHTS"."MATTER" from "PUBLIC"."VISIT", "PUBLIC"."HIGHLIGHTS" where "PUBLIC"."VISIT"."VISIT_ID" = "PUBLIC"."HIGHLIGHTS"."VISIT_ID" order by "PUBLIC"."VISIT"."START" asc

這將返回以下結果:

+------------------+-------------+-------------------------+-------------+
|     VISIT_ID     | DESCRIPTION |          START          |   MATTER    |
+------------------+-------------+-------------------------+-------------+
| 5178231763512765 | Head Ache   | 2014-05-07 23:08:10.383 | HIGH BP     |
| 5178231763512765 | Head Ache   | 2014-05-07 23:08:10.383 | SUGAR       |
| 5178231763512765 | Head Ache   | 2014-05-07 23:08:10.383 | BROKEN BONE |
+------------------+-------------+-------------------------+-------------+

但是我想要的是以下內容:

+------------------+-------------+-------------------------+---------------------------+
|     VISIT_ID     | DESCRIPTION |          START          |          MATTER           |
+------------------+-------------+-------------------------+---------------------------+
| 5178231763512765 | Head Ache   | 2014-05-07 23:08:10.383 | HIGH BP~SUGAR~BROKEN BONE |
+------------------+-------------+-------------------------+---------------------------+

一些可以幫助如何編寫查詢以獲取類似上面的數據? 如果需要,“事項”可以是任何變量。

您可以使用group_concat聚合函數(在mysql和H2中提供)來完成此操作。 所以試試這個:

select "PUBLIC"."VISIT"."VISIT_ID"
, "PUBLIC"."VISIT"."DESCRIPTION"
, "PUBLIC"."VISIT"."START"
,group_concat( "PUBLIC"."HIGHLIGHTS"."MATTER" SEPERATROR ',') as MatterAggre
from "PUBLIC"."VISIT", "PUBLIC"."HIGHLIGHTS" 
where "PUBLIC"."VISIT"."VISIT_ID" = "PUBLIC"."HIGHLIGHTS"."VISIT_ID" 
group by "PUBLIC"."VISIT"."VISIT_ID", "PUBLIC"."VISIT"."DESCRIPTION", "PUBLIC"."VISIT"."START"
order by "PUBLIC"."VISIT"."START" asc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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