Винаги има начин. Въпросът е "Трябва ли да направим това". Имайте предвид, че по този начин скривате данните за марката. Ако данните бъдат пренаредени, сортирани, сортировачът губи способността да знае коя марка е за какъв ред. Ако това е просто отпечатан отчет, който не трябва да се прибягва или да се очаква до PDF, където потребителят не може да манипулира данните, тогава добре.. Но ако това е така, потребителят може да изхвърли, за да excel и да манипулира по-късно... по-добре да имате всички данни.
Аз лично намирам това показване на информация за отвратително за електронни данни, но добре за печатни формуляри или статични отчети. Причината:на електронно мога да импортирам в excel сортиране и да играя с данните; но ако колоните "липсват" излишни данни, електронната манипулация става проблематична.
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');
ЗАПИТВАНЕ:
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
РЕЗУЛТАТИ:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Защо това работи:
Магията се случва в кръстосаното съединение и при оценката на случая.
Има 1 маса. Подреждаме записите, преди да се присъединим. Създаваме потребителска променлива, наречена @var и я задаваме на '' на първия запис в таблица foo. След това присвояваме @var на марката на първия запис. Когато SQL кръстът се присъедини към 2-ри попълнен, @var вече е марката на първия запис. Ако марките съвпадат, не се показва запис, ако марките не съвпадат, променяме стойността на @var и показваме новата стойност.
Рискове:
- ние ако се свържат други таблици или редът не е според желанията в таблицата, ще трябва първо да направим подзаявка на „foo“, за да подредим по марка
- прилагането на каквато и да е поръчка от към това, която включва марка1, вече е безполезно
- Не е за многократна употреба. Друг модул, който може да иска да използва данните (изглед), вече не може да го направи, тъй като марката е била скрита в някои от записите.