SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table
Nhưng nguyên nhân gốc rễ của vấn đề của bạn là một thiết kế cơ sở dữ liệu sai. Những chủ đề đó ngay từ đầu không nên là cột và nên được lưu trữ trong một bảng giống như kết quả mong muốn của bạn.
Chỉnh sửa
Vậy nó làm gì?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Trả về sid
, một cột "ảo" có giá trị được mã hóa cứng 'Math'
được đặt tên subject
. Vì bạn chưa lưu trữ giá trị 'Math'
ở đâu đó, điều này phải được mã hóa cứng. Sau đó, cuối cùng nó cũng chọn cột math
sử dụng tên mark
thay vì. Lưu ý sự khác biệt giữa math
và 'Math'
- một là cột, còn lại là một chuỗi ký tự do các dấu nháy đơn.
Điều này được thực hiện cho cả ba môn học (nếu bạn có bốn môn học, bạn cần bốn phần trong UNION)
UNION ALL kết hợp cả ba lựa chọn vào một truy vấn duy nhất. giải pháp andr (đã bị phản đối bởi một người không hiểu nó) làm cho điều này trở nên rõ ràng hơn bằng cách đưa rõ ràng nó vào một bảng dẫn xuất (hoặc chế độ xem nội tuyến).
Tự chạy từng phím CHỌN để xem các bộ phận riêng lẻ đang làm gì.
Phần as mark
được gọi là "bí danh cột" và cũng có thể được sử dụng để truy xuất các cột có cùng tên từ các bảng khác nhau trong một phép nối và vẫn có tên duy nhất trong tập kết quả.