Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

đã nối các hàng trong bảng thành các cột có tiêu đề cột từ các hàng ban đầu

Tôi chỉ muốn sử dụng GROUP_CONCAT() thay vì con trỏ để tạo câu lệnh đã chuẩn bị:

SELECT CONCAT(
 ' SELECT MDE_ID,'

,  GROUP_CONCAT(
     't', MDF_ID, '.MFV_Value AS `', REPLACE(MDF_Label, '`', '``'), '`'
   )

,' FROM ModuleEntries '

, GROUP_CONCAT(
    'LEFT JOIN ModuleEntryFieldValues AS t', MDF_ID, '
       ON t', MDF_ID, '.MFV_MDE_ID = ModuleEntries.MDE_ID
      AND t', MDF_ID, '.MFV_MDF_ID = ', MDF_ID
  SEPARATOR ' ')

) INTO @qry FROM ModuleFields;

Lưu để chỉnh sửa khoảng trắng để làm cho nó dễ đọc hơn, với dữ liệu mẫu của bạn @qry sau đó sẽ chứa:

SELECT MDE_ID,
       t1.MFV_Value AS `Height`,
       t2.MFV_Value AS `Width`,
       t3.MFV_Value AS `Weight`
FROM   ModuleEntries
  LEFT JOIN ModuleEntryFieldValues AS t1
         ON t1.MFV_MDE_ID = ModuleEntries.MDE_ID AND t1.MFV_MDF_ID = 1
  LEFT JOIN ModuleEntryFieldValues AS t2
         ON t2.MFV_MDE_ID = ModuleEntries.MDE_ID AND t2.MFV_MDF_ID = 2
  LEFT JOIN ModuleEntryFieldValues AS t3
         ON t3.MFV_MDE_ID = ModuleEntries.MDE_ID AND t3.MFV_MDF_ID = 3

Sau đó, người ta có thể chuẩn bị và thực hiện câu lệnh đó:

PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @qry = NULL;

Điều nào mang lại kết quả sau:

MDE_ID    Height    Width    Weight
     1    120cms    30cms    (null)

Xem nó trên sqlfiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chạy tệp .sql như một phần của truy vấn MySQL Workbench 6.2?

  2. Kết nối với MySQL trên AWS từ máy cục bộ

  3. EF6 MySQL StrongTypingException khi cột không phải là PK

  4. Lộ trình học MySQL

  5. Chèn và đặt giá trị với sự cố max () + 1