Luôn luôn có một cách. Câu hỏi đặt ra là "Chúng ta có nên làm điều này không". Lưu ý bằng cách làm này bạn ẩn dữ liệu thương hiệu. Nếu dữ liệu được sắp xếp, sắp xếp lại, bộ sắp xếp sẽ mất khả năng biết thương hiệu nào dành cho hàng nào. Nếu đây chỉ là một báo cáo in không được sử dụng hoặc mong đợi ở dạng PDF mà người dùng không thể thao tác dữ liệu thì không sao .. Nhưng nếu điều này là như vậy người dùng có thể kết xuất để excel và thao tác sau ... tốt hơn nên có tất cả dữ liệu.
Cá nhân tôi thấy cách hiển thị thông tin này khó chịu trên dữ liệu điện tử, nhưng không sao trên các biểu mẫu in hoặc báo cáo tĩnh. Lý do:trên điện tử, tôi có thể nhập vào sắp xếp excel và chơi với dữ liệu; nhưng nếu các cột bị "thiếu" dữ liệu dư thừa thì thao tác điện tử trở nên có vấn đề.
CREATE Table foo (
brand varchar(20),
description varchar(20),
prodcode varchar(20));
Insert into foo values ('Brand1', 'Description1', 'Product1'),
('Brand1', 'Description2', 'Product2'),
('Brand1', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand2', 'Description3', 'Product4'),
('Brand1', 'Description3', 'Product3');
QUERY:
SELECT case [email protected] <> f.brand then @Var :=brand end as Brand
, f.description
, f.prodcode
FROM (SELECT * FROM foo ORDER BY brand, description, prodcode) f
CROSS JOIN (SELECT @var := '') b
KẾT QUẢ:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Tại sao điều này hoạt động:
Điều kỳ diệu xảy ra trong kết hợp chéo và đánh giá trường hợp.
Có 1 bàn. Chúng tôi đang phân loại hồ sơ trước khi tham gia. Chúng tôi đang tạo một biến người dùng có tên là @var và đặt nó thành '' trên bản ghi đầu tiên trong table foo. Sau đó, chúng tôi gán @var cho thương hiệu của bản ghi đầu tiên. Khi chữ thập SQL tham gia vào @var được đệ trình thứ hai bây giờ là thương hiệu của bản ghi đầu tiên. Nếu các thương hiệu khớp nhau, không có bản ghi nào được hiển thị, nếu các thương hiệu không khớp nhau, chúng tôi thay đổi giá trị của @var và hiển thị giá trị mới.
Rủi ro:
- chúng tôi nếu các lần tham gia bảng khác xảy ra hoặc thứ tự không như mong muốn trong bảng, trước tiên chúng tôi cần thực hiện một truy vấn con trên "foo" để đặt hàng theo thương hiệu
- việc áp dụng bất kỳ đơn đặt hàng nào liên quan đến brand1 giờ đây trở nên vô giá trị
- Nó không thể tái sử dụng được. Một mô-đun khác có thể muốn tận dụng dữ liệu (chế độ xem) không còn có thể thực hiện được nữa vì thương hiệu đã bị ẩn trên một số bản ghi.