887 messaggi dal 21 marzo 2008
Ciao a tutti
ho bisogno di un aiuto per scrivere una query.
Ho una tabella Scuole con tutti i dati di alcune scuole: nome scuola, indirizzo, città, provincia ecc
Se nella chiamata della funzione che restituisce l'elenco delle scuole viene passata la provincia in cui si devono trovare le scuole, vorrei visualizzare le scuole in questo ordine:
1- scuole nella provincia specificata
2- scuole nelle province della stessa regione
3- le restanti scuole
Come posso fare?
Grazie
307 messaggi dal 13 luglio 2005
Ciao Gemini78,
innanzitutto dovresti dirci se l'informazione della provincia e della regione sono presenti nella tabella Scuole e come. Fatta questa premessa, direi che puoi risolvere con l'istruzione "UNION" di SQL (a me non piace molto, ma in questo caso ...).
In due parole potresti creare 3 query (cioe' una per ogni punto da te specificato) e poi unire i risultati con l'istruzione UNION...

Fammi sapere, ciao.

Umb
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
valevole quanto indicato da Umb relativamente alla definizione delle tabelle coinvolte, brutalmente non penso utilizzere come indicato da Umb delle funzionalita' di UNION, ma probabilmente mi appoggerei su campi calcolati per ottenere l'ordinamento stesso, similarmente alle funzionalita' di Windowing operate OVER (ORDER BY ...)...
trivialmente, qualche cosa di simile a
SET NOCOUNT ON;
DECLARE @t TABLE ( 
  IdScuola int IDENTITY, 
  Descrizione varchar(5) DEFAULT 'Descr',
  Altro varchar(5) DEFAULT 'Altro',
  Provincia char(2),
  Regione varchar(15)
  );

INSERT INTO @t (Provincia, Regione)
  VALUES ('RN', 'Emilia Romagna'), ('RN', 'Emilia Romagna')
    , ('FC', 'Emilia Romagna'), ('BO', 'Emilia Romagna'), ('RE', 'Emilia Romagna'),
    ('MI', 'Lombardia'), ('MB', 'Monza Brianza'), 
    ('NA', 'Campania'), ('CE', 'Campania');

DECLARE @param char(2) = 'RN';
DECLARE @regione varchar (15) = '';

SELECT TOP(1) @regione = Regione
  FROM @t t
  WHERE t.Provincia = @param;

WITH cte AS (
  SELECT *
    , CASE WHEN t.Provincia = @param THEN 0 ELSE 1 END AS [tagProv]
    , CASE WHEN t.Regione = @regione THEN 0 ELSE 1 END AS [tagRegione]

    FROM @t t
  )
  SELECT c.*
    FROM cte c
    ORDER BY c.tagProv, c.tagRegione, c.Regione, c.Provincia, c.IdScuola;
--<----
IdScuola    Descrizione Altro Provincia Regione         tagProv     tagRegione
----------- ----------- ----- --------- --------------- ----------- -----------
1           Descr       Altro RN        Emilia Romagna  0           0
2           Descr       Altro RN        Emilia Romagna  0           0
4           Descr       Altro BO        Emilia Romagna  1           0
3           Descr       Altro FC        Emilia Romagna  1           0
5           Descr       Altro RE        Emilia Romagna  1           0
9           Descr       Altro CE        Campania        1           1
8           Descr       Altro NA        Campania        1           1
6           Descr       Altro MI        Lombardia       1           1
7           Descr       Altro MB        Monza Brianza   1           1


ma ovviamente e' meglio basarsi sulla reale definizione delle relazioni coinvolte...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
887 messaggi dal 21 marzo 2008
Andrea, perfetto funziona
Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.