Tôi tự hỏi nếu có một cách kinh điển để chuyển đổi dữ liệu từ định dạng dài sang rộng trong SQLite (đó là hoạt động thường trong miền của cơ sở dữ liệu quan hệ?). Tôi đã cố gắng để làm theo this example cho MySQL nhưng tôi đoán SQLite không có cấu trúc IF tương tự ... Cảm ơn!SQLite từ lâu đến các định dạng rộng?
11
A
Trả lời
12
IF
là tiện ích mở rộng không chuẩn của MySQL. Tốt hơn là luôn sử dụng CASE
là chuẩn SQL và hoạt động trong tất cả các cơ sở dữ liệu tuân thủ, bao gồm SQLite và MySQL (và MSSQL, Oracle, Postgres, Access, Sybase ... và bật và bật).
Dưới đây là một ví dụ về cách thực hiện cùng một truy vấn với CASE
:
SELECT Country,
MAX(CASE WHEN Key = 'President' THEN Value ELSE NULL END) President,
MAX(CASE WHEN Key = 'Currency' THEN Value ELSE NULL END) Currency
FROM Long
GROUP BY Country
ORDER BY Country;
Dưới đây là một cách khác để đại diện cho cùng một truy vấn sử dụng tham gia. Tôi nghĩ rằng điều này có thể hiệu quả hơn, nhưng nó giả định chỉ có một bản ghi cho mỗi giá trị chính trong mỗi nhóm (phiên bản CASE
cũng vậy, nhưng sẽ không dẫn đến hàng bổ sung nếu điều đó không đúng, chỉ có kết quả ít hơn dự đoán được).
SELECT
D.Country,
P.Value President,
C.Value Currency
FROM
(
SELECT DISTINCT Country
FROM Long
) D
INNER JOIN
( SELECT Country, Value
FROM Long
WHERE Key = 'President'
) P
ON
D.Country = P.Country
INNER JOIN
( SELECT Country, Value
FROM Long
WHERE Key = 'Currency'
) C
ON
D.Country = C.Country
ORDER BY
D.Country;
Và đối với những kỷ lục, đây là DDL và kiểm tra dữ liệu tôi đã sử dụng:
CREATE TABLE Long (ID INTEGER PRIMARY KEY AUTOINCREMENT, Country TEXT, Key TEXT, Value TEXT);
INSERT INTO Long VALUES (NULL, 'USA', 'President', 'Obama');
INSERT INTO Long VALUES (NULL, 'USA', 'Currency', 'Dollar');
INSERT INTO Long VALUES (NULL, 'China', 'President', 'Hu');
INSERT INTO Long VALUES (NULL, 'China', 'Currency', 'Yuan');
Các vấn đề liên quan
- 1. Transpose/reshape dataframe không có "timevar" từ lâu để định dạng rộng
- 2. Định dạng lại dữ liệu chuỗi thời gian từ định dạng rộng đến cao (để vẽ)
- 3. Từ lâu đến phút và giây?
- 4. Định dạng từ ve đến ngày
- 5. định dạng dấu thời gian sqlite
- 6. Chuyển đổi dữ liệu từ định dạng dài sang định dạng rộng với nhiều cột số
- 7. Định dạng lại Dữ liệu Bảng điều khiển Định dạng Rộng thành Định dạng Dài
- 8. Làm cách nào để định dạng ngày đến từ MongoDB?
- 9. định dạng chiều rộng văn bản vim
- 10. Định dạng chiều rộng dòng tiêu chuẩn
- 11. Định dạng lại tập dữ liệu phức tạp từ dài đến rộng bằng cách sử dụng lại()
- 12. PHP từ bỏ SQlite?
- 13. Align tại từ lâu
- 14. Mysql, định hình lại dữ liệu từ dài/cao đến rộng
- 15. Cách chọn dữ liệu giữa hai ngày từ db sqlite ở định dạng dd-mm-yyyy?
- 16. sqlite từ lệnh nhắc lệnh không được nhận dạng
- 17. Định dạng số chiều rộng cố định python 3
- 18. C# Định dạng Excel Interop giống như định dạng của Excel dưới dạng bảng
- 19. Tính tuổi từ định dạng DateTime ở định dạng Years.Months?
- 20. Các hàm do người dùng định nghĩa SQLite trong Lisp
- 21. CRM 2011 - Truy xuất các định dạng được định dạng từ thực thể được kết hợp
- 22. Định dạng ISODate từ Mongodb
- 23. Chuỗi chuyển đổi Sqlite đến ngày
- 24. Nhập khẩu FIles với phần mở rộng .sqlite vào R
- 25. Các đường ray xác định định dạng yêu cầu đến như thế nào?
- 26. "% s"% định dạng so với "{0}". Định dạng() so với "?" định dạng
- 27. Định dạng có thể mở rộng ở Roslyn?
- 28. Định dạng ngày tháng trong javascript đến phần nghìn giây
- 29. Nhận tất cả các hàng từ SQLite
- 30. Mở rộng danh sách các định dạng ảnh được hỗ trợ trong GDI +
Rất hữu ích !! Cảm ơn bạn - Tôi cần thêm thời gian để tìm kiếm ví dụ thứ hai nhưng điều này thực sự mở rộng kiến thức SQL của tôi! – hatmatrix