![](/img/trans.png)
[英]How can I implement an SQL query that starting from a query returning multiple records return a single records with multiple columns?
[英]How can I change this query returning multiples records to return a single record containing the concatenation of the original records?
我不太喜歡數據庫,因此面臨以下問題。 我正在使用MySql
我有這個查詢:
SELECT
LSSN.livestock_species_name AS species_name,
LSFT.feed_type_name AS feed_type_name,
LSFT.description AS feed_description
FROM LivestockDetails AS LSD
INNER JOIN LivestockSpecies AS LSS
ON LSD.live_stock_species_id = LSS.id
INNER JOIN LivestockSpeciesName AS LSSN
ON LSS.id = LSSN.livestock_species_id
INNER JOIN Languages AS LNG
ON LSSN.language_id = LNG.id
INNER JOIN LsFeedDetails AS LSFD
ON LSD.ls_feed_details_id = LSFD.id
INNER JOIN LsFeedTypes AS LSFT
ON LSFD.ls_feed_types_id = LSFT.id
WHERE LSD.live_stock_species_id = 3
AND LSD.ls_area_id = 2
AND LSD.ls_action_type_id = 1
AND LSD.ls_message_id is null
AND LNG.id = 1
返回這些記錄:
species_name feed_type_name feed_description
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Local Cows Rangeland Grasses
Local Cows Crop residues Maize and sorghum Stover, rice, wheat, and sugar bean straw, parts of banana plants, wheat straw
Local Cows Improved grasses e.g. Napier grass
Local Cows Browsing and herbaceous legumes Browsing (largely during dry season) and herbaceous legumes (year round)
Local Cows Planted pastures Napier, etc...
Local Cows Assorted weeds Assorted weeds
好的,這些檢索的數據很好,但是我必須以以下方式修改此查詢:
1)它返回一條記錄,其中包含上一個查詢檢索到的記錄中包含的所有信息的串聯。
2)串聯必須是這樣的:
feed_type_name RECORD-1 + (feed_description RECORD-1) + ";" +feed_type_name RECORD-2 + (feed_description RECORD-2) + ";" + feed_type_name RECORD-3 + ";" + (feed_description RECORD-3) + ..............................
因此,以先前檢索到的數據為例,如下所示:
Rangeland (Grasses) ; Crop residues (Maize and sorghum Stover, rice, wheat, and sugar bean straw, parts of banana plants, wheat straw) ; Improved grasses (e.g. Napier grass) ; ............................................
我真的不知道如何修改我的原始查詢以創建執行類似此操作的查詢。 你能幫我做嗎?
GROUP BY“ species_name”並使用GROUP_CONCAT(feed_type_name SEPARATOR',')函數。
https://dev.mysql.com/doc/refman/5.7/zh-CN/group-by-functions.html#function_group-concat
使用GROUP_CONCAT
並使用GROUP BY
按物種進行聚集:
SELECT
LSSN.livestock_species_name AS species_name,
GROUP_CONCAT(CONCAT(LSFT.feed_type_name, ' (', LSFT.description, ')') SEPARATOR ';') AS text
FROM LivestockDetails AS LSD
INNER JOIN LivestockSpecies AS LSS
ON LSD.live_stock_species_id = LSS.id
INNER JOIN LivestockSpeciesName AS LSSN
ON LSS.id = LSSN.livestock_species_id
INNER JOIN Languages AS LNG
ON LSSN.language_id = LNG.id
INNER JOIN LsFeedDetails AS LSFD
ON LSD.ls_feed_details_id = LSFD.id
INNER JOIN LsFeedTypes AS LSFT
ON LSFD.ls_feed_types_id = LSFT.id
WHERE
LSD.live_stock_species_id = 3
AND LSD.ls_area_id = 2
AND LSD.ls_action_type_id = 1
AND LSD.ls_message_id is null
AND LNG.id = 1
GROUP BY
LSSN.livestock_species_name;
可以如下進行
SELECT feed_type_name +'('+feed_description +') ; ' as [text()] from
.....
.....
.....
FOR XML PATH('')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.