Der er altid en vej. Spørgsmålet er "Skal vi gøre det her". Bemærk ved at gøre dette skjuler du branddataene. Hvis dataene omarrangeres, sorteres, mister sortereren muligheden for at vide, hvilket mærke der er for hvilken række. Hvis dette kun er en udskrevet rapport, der ikke skal ty eller forventes til en PDF, hvor en bruger ikke kan manipulere dataene, så ok.. Men hvis det er sådan, kan en bruger dumpe for at excel og manipulere senere... bedre at have alle data.
Jeg synes personligt, at denne visning af information er usmagelig på elektroniske data, men ok på trykte formularer eller statiske rapporter. Årsagen:på elektronisk er jeg i stand til at importere til excel sortere og lege med dataene; men hvis kolonner "mangler" redundante data, så bliver 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');
FORESPØRGSEL:
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
RESULTATER:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Hvorfor dette virker:
Magien sker i krydssammenføjningen og på case-evalueringen.
Der er 1 bord. Vi sorterer posterne, før vi tiltræder. Vi opretter en brugervariabel kaldet @var og sætter den til '' på den første post i tabel foo. Så tildeler vi @var mærket på den første plade. Når SQL-krydset slutter sig til den 2. fil, er @var nu mærket for den første post. Hvis mærkerne matcher, vises ingen registrering, hvis mærkerne ikke matcher, ændrer vi værdien af @var og viser den nye værdi.
Risici:
- hvis andre tabeller tilslutter sig, eller rækkefølgen ikke er som ønsket i tabellen, skal vi først lave en underforespørgsel på "foo" for at bestille efter mærke
- at påføre en ordre ved dette, som involverer brand1, er nu værdiløst
- Den er ikke så genbrugelig. Et andet modul, som måske ønsker at udnytte dataene (visningen), er ikke længere i stand til at gøre det, fordi mærket er blevet skjult på nogle af registreringerne.