假設兩個表a,b,b中通過字段id與a表關聯,a表與b表為一對多的關系。假設b表中存在一字段name,現需要查詢a表中的記錄,同時獲取存儲在b表中的name信息,按照常規查詢,b表中有多少記錄,則會顯示多少行,如果需要只顯示a表記錄行數,則需要把查詢name字段得到的多行記錄進行合並,可以通過程序實現,但也可直接在sql層完成。
方法:
利用group_concat()方法,參數為需要合並的字段,合並的字段分隔符默認為逗號,可通過參數separator指定,該方法往往配合group by 一起使用。
例子:
select a.*,group_concat(b.name separator '-') as name from a left join b on a.id=b.id group by a.id;
在你第二個查詢的基礎上進行行轉列,如果類型是動態的建議封裝存儲過程。在外層套一個查詢,用 max(case when then ... end ) as '列名'...這種方士可以實現。
多行轉換為一行的處理.
不同的數據庫,處理機制不同.
對於SQL Server 2005+版本的 使用FOR XML的方式
對於MySQL使用 GROUP_CONCAT 函數 的方式進行處理
對於Oracle使用 WMSYS.WM_CONCAT 函數 的方式進行處理
其他數據庫就沒研究過了......
參考資料:hi.baidu.com/...a.html