Tôi có dữ liệu trong bảng mysql ở định dạng dài/cao (được mô tả bên dưới) và muốn chuyển đổi sang định dạng rộng. Tôi có thể làm điều này bằng cách sử dụng chỉ sql?Mysql, định hình lại dữ liệu từ dài/cao đến rộng
Dễ nhất để giải thích bằng ví dụ. Giả sử bạn có thông tin về (quốc gia, trọng điểm, giá trị) cho các nước M, phím N (ví dụ như các phím có thể thu nhập, lãnh đạo chính trị, khu vực, châu lục, vv)
Long format has 3 columns: country, key, value
- M*N rows.
e.g.
'USA', 'President', 'Obama'
...
'USA', 'Currency', 'Dollar'
Wide format has N=16 columns: county, key1, ..., keyN
- M rows
example:
country, President, ... , Currency
'USA', 'Obama', ... , 'Dollar'
Có cách nào trong SQL để tạo một bảng mới với dữ liệu ở định dạng rộng?
select distinct key from table;
// điều này sẽ cho tôi tất cả các khóa.
1) Làm cách nào để tạo bảng bằng các yếu tố chính này?
2) Làm cách nào để điền các giá trị bảng?
Tôi khá chắc chắn rằng tôi có thể làm điều này với bất kỳ ngôn ngữ kịch bản nào (tôi thích python), nhưng muốn biết nếu có một cách dễ dàng để làm điều này trong mysql. Nhiều gói thống kê như R và STATA có lệnh này được xây dựng bởi vì nó thường được sử dụng.
======
Để được rõ ràng hơn, đây là sản phẩm đầu vào mong muốn cho một trường hợp đơn giản:
Input:
country attrName attrValue key (these are column names)
US President Obama 2
US Currency Dollar 3
China President Hu 4
China Currency Yuan 5
Output
country President Currency newPkey
US Obama Dollar 1
China Hu Yuan 2
cách tôi làm việc. Cách của bạn tốt hơn nhiều. Tôi yêu bạn hoặc cảm ơn. Hãy lựa chọn bạn thích cái nào để thể hiện sự đánh giá cao. – chongman
Toán tử IF là độc quyền đối với MySQL. Sử dụng CASE thay vì tuân thủ với SQL chuẩn. Chi tiết hơn ở đây: [SQLite dài đến các định dạng rộng?] (Http://www.stackoverflow.com/questions/2444708/sqlite-long-to-wide-formats) – SuperAce99
@mluebke: liên kết của bạn đã chết: ( –