Vždy existuje cesta. Otázka zní:„Máme to udělat“. Všimněte si, že tím skryjete údaje o značce. Pokud se data přeuspořádají, seřadí, třídič ztratí schopnost vědět, která značka je pro který řádek. Pokud se jedná pouze o tištěnou zprávu, kterou nelze uchýlit nebo očekávat do PDF, kde uživatel nemůže manipulovat s daty, pak je to v pořádku. Ale pokud je to tak, může uživatel uložit do excelu a manipulovat s ním později... všechna data.
Osobně považuji toto zobrazování informací za nechutné na elektronických datech, ale v pořádku na tištěných formulářích nebo statických sestavách. Důvod:na elektronické jsem schopen importovat do excelu třídit a hrát si s daty; ale pokud ve sloupcích „chybějí“ nadbytečná data, pak se elektronická manipulace stává problematickou.
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');
DOTAZ:
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
VÝSLEDKY:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Proč to funguje:
Kouzlo se odehrává v křížovém spojení a při vyhodnocování případu.
Je tam 1 stůl. Než se připojíme, třídíme záznamy. Vytváříme uživatelskou proměnnou s názvem @var a nastavujeme ji na '' v prvním záznamu v tabulce foo. Poté přiřadíme @var ke značce první desky. Když se křížek SQL připojí k 2. poli, @var je nyní značkou prvního záznamu. Pokud se značky shodují, nezobrazí se žádný záznam, pokud se značky neshodují, změníme hodnotu @var a zobrazíme novou hodnotu.
Rizika:
- pokud dojde k dalším spojením tabulek nebo pořadí není v tabulce požadované, museli bychom nejprve provést dílčí dotaz na „foo“, abychom mohli seřadit podle značky
- použít na to jakoukoli objednávku, která zahrnuje značku1, je nyní bezcenné
- Není tak znovu použitelný. Jiný modul, který může chtít využít data (zobrazení), to již nedokáže, protože značka byla na některých záznamech skryta.