C'è sempre un modo. La domanda è "Dovremmo farlo". Nota in questo modo nascondi i dati del marchio. Se i dati vengono riordinati, ordinati, il selezionatore perde la capacità di sapere quale marca è per quale riga. Se questo è solo un report stampato che non deve essere utilizzato o previsto in un PDF in cui un utente non può manipolare i dati, allora ok.. Ma se è così un utente può eseguire il dump per eccellere e manipolare in seguito... meglio avere tutti i dati.
Personalmente trovo questa visualizzazione di informazioni sgradevole sui dati elettronici, ma ok su moduli stampati o rapporti statici. Il motivo:sull'elettronica sono in grado di importare in excel, ordinare e giocare con i dati; ma se le colonne contengono dati ridondanti "mancanti", la manipolazione elettronica diventa problematica.
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');
DOMANDA:
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
RISULTATI:
Brand description prodcode
Brand1 Description1 Product1
(null) Description2 Product2
(null) Description3 Product3
(null) Description3 Product4
Brand2 Description3 Product4
(null) Description3 Product4
Perché funziona:
La magia avviene nel cross join e nella valutazione del caso.
C'è 1 tavolo. Stiamo ordinando i record prima di unirci. Stiamo creando una variabile utente chiamata @var e impostandola su '' sul primo record nella tabella foo. Quindi assegniamo @var al marchio del primo record. Quando la croce SQL si unisce al 2° archivio, @var è ora il marchio del primo record. Se i marchi corrispondono, non viene visualizzato alcun record, se i marchi non corrispondono, cambiamo il valore di @var e visualizziamo il nuovo valore.
Rischi:
- se si verificano altri join di tabelle o l'ordine non è quello desiderato nella tabella, dovremmo prima eseguire una sottoquery su "foo" per ordinare per marca
- applicare qualsiasi ordine per questo che coinvolge brand1 ora è inutile
- Non è così riutilizzabile. Un altro modulo che potrebbe voler sfruttare i dati (visualizza) non è più in grado di farlo perché il marchio è stato nascosto su alcuni record.