MySQL是一種關系型數據庫管理系統,它并不直接支持寬表轉豎表這種操作,但可以通過一些SQL語句來實現這個功能。
寬表指的是表中有多個字段,所代表的含義可能相似或者關聯密切,而豎表則是將這些字段轉為多條記錄,每條記錄只包含一份數據。
下面是一個寬表:
id | name | age | sex | |----|------|-----|-----| | 1 | Tom | 20 | M | | 2 | Jane | 25 | F | | 3 | John | 30 | M
我們希望將這個寬表轉化為豎表:
id | attribute | value | |----|-----------|-------| | 1 | name | Tom | | 1 | age | 20 | | 1 | sex | M | | 2 | name | Jane | | 2 | age | 25 | | 2 | sex | F | | 3 | name | John | | 3 | age | 30 | | 3 | sex | M
這個轉換可以通過UNION ALL和CASE語句來實現:
SELECT id, 'name' as attribute, name as value FROM table_name UNION ALL SELECT id, 'age' as attribute, age as value FROM table_name UNION ALL SELECT id, 'sex' as attribute, sex as value FROM table_name;
這個SQL語句會將原表中的'name'、'age'和'sex'三列數據轉為豎表形式。由于每個SELECT語句的列名和數據是固定的,我們可以使用UNION ALL將它們合并。其中,’attribute’列名是我們人為設置的,’value’列名是原表中對應列的列名。