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

SQL để tạo bảng ma trận

Bạn phải sử dụng tóm tắt có điều kiện và SQL động cho việc này

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN l.Item = ',
      id,
      ' THEN l.qty END) `',
      name, '`'
    )
  ) INTO @sql
FROM ItemLIst;

SET @sql = CONCAT('SELECT u.name, ', @sql, ' 
                     FROM OrderList l JOIN UserList u
                       ON l.User = u.id
                    GROUP BY u.name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Đầu ra:

|  NAME |  APPLE | ORANGE | BANANA |   KIWI |  MANGO |
------------------------------------------------------
| James | (null) | (null) | (null) | (null) |      1 |
|  John | (null) |      2 |      3 |      1 | (null) |
|  Mary |      4 |      2 | (null) | (null) | (null) |

Đây là SQLFiddle bản demo

Bây giờ bạn sẽ không thể gói nó thành một dạng xem, nhưng bạn có thể đặt nó thành một thủ tục được lưu trữ.

DELIMITER $$
CREATE PROCEDURE sp_order_report()
BEGIN
  SET @sql = NULL;
  SELECT
    GROUP_CONCAT(DISTINCT
      CONCAT(
        'SUM(CASE WHEN l.Item = ',
        id,
        ' THEN l.qty END) `',
        name, '`'
      )
    ) INTO @sql
  FROM
    ItemLIst;
  SET @sql = CONCAT('SELECT u.name, ', @sql, ' 
                       FROM OrderList l JOIN UserList u
                         ON l.User = u.id
                      GROUP BY u.name');

  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;

Và sử dụng nó như thế này:

CALL sp_order_report();

Đây là SQLFiddle bản demo




  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 để đặt các kết quả truy vấn MYSQL THEO điều kiện ORDER BY?

  2. Loại dữ liệu MySQL nào để sử dụng để lưu trữ các giá trị boolean

  3. Số MAX là bao nhiêu nếu tôi lưu trữ int (255) trong MySQL?

  4. Tạo liên kết từ mục dòng thời gian của Google Chart

  5. Bảng và mảng liên kết PHP MYSQL