簡體   English   中英

如何更改此查詢以返回多個記錄,以返回包含原始記錄串聯的單個記錄?

[英]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.

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