SQL query o stored procedure per ordinamento secondo 2 date

mercoledì 30 giugno 2010 - 10.51

cabron Profilo | Newbie

ciao a tutti, sono nuovo e ho già trovato molte cose interessanti su questo forum..
sto lavorando su sql 2005 e non arrivo a trovare una soluzione per fare una query o una stored procedure.
in pratica ho una tabella dei progetti, trai i vari campi son presenti data d'inizio e data di fine, vorrei un ordinamento del seguente tipo
prima progetti più recenti (data inizio più recente) e senza data di fine, poi progetti con data di fine (quindi conclusi)
avete qualche idea?
grazie mille!

carloalberto Profilo | Junior Member


>prima progetti più recenti (data inizio più recente) e senza
>data di fine, poi progetti con data di fine (quindi conclusi)
>avete qualche idea?
prova a fare le due select, separate, con un campo fisso 'priorita', nella prima metti 1, nella seconda metti 2 ordinate come vuoi tu.
poi metti in UNION le due select e ordini tutto su 'priorita', dovresti ottenere quello che vuoi


>grazie mille!
di nulla

alx_81 Profilo | Guru

>ciao a tutti,
ciao e benvenuto su dotnethell.it!

>in pratica ho una tabella dei progetti, trai i vari campi son
>presenti data d'inizio e data di fine, vorrei un ordinamento
>del seguente tipo
>prima progetti più recenti (data inizio più recente) e senza
>data di fine, poi progetti con data di fine (quindi conclusi)
>avete qualche idea?
Potrebbe essere fattibile tutto tramite un semplice statement, ma dovresti essere un po' più preciso nei dettagli, affinchè possiamo procedere con risposte mirate.
Al fine di questo, dovresti passarci la CREATE della tabella (o la struttura), qualche riga di esempio e il risultato che vorresti ottenere.

>grazie mille!
di nulla!

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

cabron Profilo | Newbie

fatto e ha funzionato.. avevo già provato con la union ma non avevo proprio pensato a mettere un campo fisso..
alla fine ho fatto un order by priorita, data inizio e viene proprio come voglio io..
una domanda visto che in una view non posso fare un order by faccio una stored che prende le 2 viste e mi fa la union, può andare bene? o è meglio inserire tutto il codice nella stored?
di nuovo grazie mille!!

carloalberto Profilo | Junior Member


>di nuovo grazie mille!!
di nulla ...
ps non ti scordare di cliccare su 'risposta accettata' :-)

cabron Profilo | Newbie

di nuovo grazie a entrambi!

carloalberto Profilo | Junior Member

chiedo perdono non avevo visto questa parte ..

>una domanda visto che in una view non posso fare un order by
>faccio una stored che prende le 2 viste e mi fa la union, può
>andare bene? o è meglio inserire tutto il codice nella stored?
>di nuovo grazie mille!!

credo che sia meglio fare in unico statement, per questioni di performance ..
quindi ... metterei tutto in una unica stored

alx_81 Profilo | Guru

>credo che sia meglio fare in unico statement, per questioni di
>performance .. quindi ... metterei tutto in una unica stored
proprio per questo consiglio a chiunque faccia richieste di questo tipo, di passare sempre la create, qualche dato e l'esempio.
Così è più semplice essere mirati con l'help

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

cabron Profilo | Newbie

@alx_81 prossima volta sarà fatto!! :D
@carloalberto si alla fine ho fatto così ;)

lbenaglia Profilo | Guru

>chiedo perdono non avevo visto questa parte ..
>
>>una domanda visto che in una view non posso fare un order by
>>faccio una stored che prende le 2 viste e mi fa la union, può
>>andare bene? o è meglio inserire tutto il codice nella stored?
>>di nuovo grazie mille!!
>
>credo che sia meglio fare in unico statement, per questioni di
>performance ..
>quindi ... metterei tutto in una unica stored

Ciao,

Le viste non sono altro che comandi di SELECT salvati nel db.
Quando richiami una vista in realtà viene "esploso" il comando ed eseguito, di conseguenza è equivalente eseguire la vista o il comando di SELECT dato che a differenza delle stored procedure, in entrambi i casi verrà generato un nuovo piano di esecuzione.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

carloalberto Profilo | Junior Member

>Le viste non sono altro che comandi di SELECT salvati nel db.
>Quando richiami una vista in realtà viene "esploso" il comando
>ed eseguito, di conseguenza è equivalente eseguire la vista o
>il comando di SELECT dato che a differenza delle stored procedure,
>in entrambi i casi verrà generato un nuovo piano di esecuzione.


Ciao Lorenzo, per curiosità didattica ....
non ho capito pero cosa consigli ... meglio la stored o no? :-)
ciao e grazie

cabron Profilo | Newbie

lbenaglia grazie per la spiegazione, mi associo a carloalberto per la domanda.. ;)

lbenaglia Profilo | Guru

>non ho capito pero cosa consigli ... meglio la stored o no? :-)
Le stored procedures hanno la particolarità di generare 1 execution plan per ogni contesto di sicurezza, ovvero se il medesimo client o client che condividono la medesima connection string (alla lettera!) richiamano una sp, SQL Server genererà 1 solo piano di esecuzione che verrà cachato in memoria.
In questo modo le chiamate successive saranno estremamenti più veloci.
Inoltre la sp possono incapsulare una logica di business ben più compessa rispetto alle viste il cui body può essere costituito solo da 1 o più comandi di SELECT.

Quindi, è sempre opportuno accedere ad un db utilizzando le sp, anche se le viste assicurano un ottimo sistema per astrarre l'accesso alle singole tabelle e memorizzare in forma permanente i comandi di SELECT (magari complessi) lato server.

>ciao e grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5