Det finns alltid ett sätt. Frågan är "Ska vi göra det här". Observera att genom att göra detta döljer du varumärkesdata. Om data ordnas om, sorteras, förlorar sorteraren förmågan att veta vilket märke som är för vilken rad. Om detta bara är en utskriven rapport som inte ska tillgripas eller förväntas till en PDF där en användare inte kan manipulera data så ok.. Men om det är så kan en användare dumpa för att excel och manipulera senare... bättre att ha all data.
Jag tycker personligen att denna visning av information är osmaklig på elektronisk data, men ok på tryckta formulär eller statiska rapporter. Anledningen:på elektronisk kan jag importera till excel sortera och leka med data; men om kolumner "saknar" redundant data så blir elektronisk manipulation problematisk.
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');
FRÅGA:
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
RESULTAT:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Varför detta fungerar:
Magin händer i korskopplingen och i utvärderingen av ärendet.
Det finns 1 bord. Vi sorterar skivorna innan vi går med. Vi skapar en användarvariabel som heter @var och ställer in den på '' på den första posten i tabellen foo. Sedan tilldelar vi @var märket för den första skivan. När SQL-korset ansluter till den 2:a inlämnade är @var nu varumärket för den första posten. Om varumärkena matchar visas ingen post, om varumärkena inte matchar ändrar vi värdet på @var och visar det nya värdet.
Risker:
- vi om andra tabeller går med, eller ordningen inte är som önskad i tabellen, skulle vi behöva göra en underfråga först på "foo" för att beställa efter varumärke
- att tillämpa en beställning genom detta som involverar varumärke1 är nu värdelöst
- Den är inte lika återanvändbar. En annan modul som kanske vill utnyttja data (vy) kan inte längre göra det eftersom varumärket har dolts i några av posterna.