Tôi đang gặp một số rắc rối với SQL: Về cơ bản, tôi đang cố gắng lấy lại kết quả có chứa một tổng số TẤT CẢ các câu hỏi cho nhân viên (được nhóm theo công ty) và cũng thêm "onetime_items" được thêm thủ công vào các mục trong một bảng khác nhau.
Tôi hiện có câu lệnh SQL này (Tôi đang sử dụng MySQL):
SELECT
CONCAT_WS(
', ', count(DISTINCT CONCAT(emailaddress, '_', e.id)),
(
SELECT GROUP_CONCAT(items SEPARATOR '; ') as OneTimeItems
FROM (
SELECT CONCAT_WS(
': ', oi.item_name, SUM(oi.item_amount)
) items
FROM onetime_item oi
WHERE oi.company_id = e.company_id
AND oi.date BETWEEN '2015-12-01'
AND LAST_DAY('2015-12-01')
GROUP BY oi.item_name
) resulta
)
) as AllItems,
e.id,
LEFT(e.firstname, 1) as voorletter,
e.lastname
FROM question q
LEFT JOIN employee e ON q.employee_id = e.id
WHERE 1=1
AND YEAR(created_at) = '2015'
AND MONTH(created_at) = '12'
GROUP BY e.company_id
Bây giờ tôi nhận được lỗi sau:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'e.company_id' in where clause
Ngày được sử dụng là ngày giả và mệnh đề 1 = 1 ở dưới cùng bởi vì tôi đang tạo câu lệnh where dựa trên các giá trị đầu vào của người dùng.
Tất cả các cột DO tồn tại trong nhân viên bảng và tham gia bên trái hoạt động (Tôi đã thử nhập id theo cách thủ công thay vì sử dụng tham chiếu cột và nó hoạt động, tôi đã nhận được kết quả đúng)
Tôi cũng xin lỗi nhưng tôi không được phép đăng một lược đồ bảng hoặc bất cứ điều gì liên quan đến cấu trúc DB trực tuyến.
Bất kỳ ý tưởng nào về lý do tại sao tham chiếu đến e.company_id không thành công?
EDIT: Đây là bộ kết quả tôi cần:
5, Het is je verjaardag: 1; Skivakantie: 1; Telefonische leadvergoeding: 8
Việc xây dựng như sau: 5 = dấu phẩy được phân tách để lấy phần còn lại. Dẫn là sự kết hợp độc đáo từ bảng Câu hỏi và phần còn lại của kết quả được tạo từ onetime_items.
EDIT 2 : SQL fiddle liên tục gây ra lỗi cho tôi vì vậy tôi sẽ đăng một DB nhỏ đã tạo ra với một ít dữ liệu đã tạo: http://pastebin.com/cCveVtGr
GROUP BY
hoạt động "sau" chọn (đơn giản hóa rất nhiều), vì vậy đôi khi nó không thấy các cột bạn không chọn (có thể phụ thuộc vào tối ưu hóa trình lập kế hoạch thực hiện cho truy vấn của bạn, v.v.). Vì vậy, thêm , e.company_id
sau e.lastname
.