Newsgroup: it.comp.lang.visual-basic
Titolo: Query SQLServer abbastanza complessa

Salve.
La query che dovrei fare č cosě:
1) Seleziona tutto dalla tabella quando la data č NULL
2) Se non c'č una data NULL, allora recupera tutto dalla
tabella utilizzando la data + recente
Non so tradurre il tutto in una sola espressione SQL.
Qualche idea?
Andrea

[*The DeerBear* : 
rain...@tin.it
] ha scritto:

Nemmeno io.
Pensa se quella data, invece che Null, fosse 0 (purtroppo non confrontabile
con Null, almeno in Where)... :-P
Comunque (ho provato con ADO e Access), pare funzionare (le Null vanno in
coda, dopo le 0)Select * From Tabella Order By data Desc


non mi č molto chiaro quello che dovresti fare comunque:
1)
select * from tabella where campoData is null
2)
select * from tabella order by campoData desc
p.s. potresti fare sempre una unione delle due tabelle:
    select * from tabella where campoData is null
    union
    select * from tabella where campoData is not null order by campoData
desc

 non mi è molto chiaro quello che dovresti fare
Ciao
Cerco di spiegarlo in modo più chiaro:
Quando un certo campo data è NULL, nella mia
applicazione significa che quella riga è "attiva".
Se non è NULL, vuol dire che quella riga è "inattiva".
Il mio scopo è trovare la riga attiva oppure la più
recente riga "inattiva".
Il tutto vorrei farlo con una query sola.
Capito adesso? :-)
Andrea

 Il tutto vorrei farlo con una query sola.
Scusa se insisto, ma hai provato con l'Order By (magari con un "Select Top 1
* From Tabella Order By campo_strano Desc")?

 "Select Top 1 * From Tabella Order By campo_strano Desc")?
Ancora no, ma sicuramente proverò appena avrò riscritto
tutta la classe che gestisce la cosa.
Andrea

 Andrea
IF EXISTS(Select Campodata from Tabella where (Tabella.CampoData) Is Null)
    Select...............
ELSE
    Select...................
Solo un'idea
Ciao
Alessandro
--
Morfeus®
Free Joint
:PII

 Capito adesso? :-)
ora sě...
eccoti allora la query che vuoi:
(select * from tabella where campoData is null)
union
(select * from tabella where campodata is not null
    and campodata in (select max(campodata) from tabella where campodata is
not null))
la prima  parte estrae tutte le righe con data vuota mentre la seconda solo
quelle righe che hanno data uguale a quella piů elevata)
ciao

  ciao
Ciao
Andrea

 >  ciao
no estrae tutte le date null * e *  la data più recente...
altrimenti fai due query separate, la prima con le date null e
se il risultato è 0 record allora esegui la seconda parte


eccoti una versione riveduta e corretta che fa proprio quello che vuoi te
(io te la pongo in versione Oracle):
select decode(count(*), 0, (select * from tabella where campodata is not
null and campodata in (select max(campodata) from tabella where campodata is
not null)),select * from tabella where campodata is not null)
from tabella where campoData is null
la DECODE funziona così:
select decode(campo,
        condizione1,istruzione se condizione1 è vera,
             istruzione se condizione1 è falsa)
from ....

 altrimenti fai due query separate
Eh, proprio quello che volevo evitare.
Secondo te con una SP si riesce meglio?
Andrea

 Secondo te con una SP si riesce meglio?
Ma non mi leggi?



uhmmm non so se funziona...andrebbe provata! prova un po' e poi magari fammi
sapere ciao

 Ma non mi leggi?
Evidentemente No ma in ogni caso ti posto un'altra cosina e basta.
Con le SP potresti immettere una condizione in quattro e quattr'otto se
invece ti accontenti :
SELECT deerbear.Nome, deerbear.Data
FROM deerbear
WHERE (((deerbear.Nome) In (Select deerbear.nome from deerbear where
((deerbear.data) is  NULL))));
glio order aggiungili tu
Ciao
Alessandro


 Ma non mi leggi?
Ti leggo da casa, ma non dall'ufficio, perché
dall'ufficio sei in plonk, per i motivi che ben sai.
Andrea