Immaginiamo di avere la tabella T1 con i campi:
Nomx ---- nvarchar(255) ----- Il nome
Datx ---- datetime ---------- La data
Orax ---- Float ------------- L'orario (perche poi float ??? )
Idxx ---- int --------------- Contatore (Inutile per l'esempio)
Nel campo Datx (datetime) che tu usi solo per la data potrebbe stsrci anche la parte oraria
allora per dormire tranquilli ne estraiamo il "CONVERT(varchar(10), Datx, 102)" che nel caso
ti estrae solamente la data senza orario
Uno dei procedimenti é:
Raggruppi per Nomx e Datx trovando il conteggio di Orax minore dell'attuale
cosi per ogni Nomx avrai un conteggio sequenziale (sequ) uguale a 0, 1, 2, 3, eccetera
che sono le registrazioni effetuate nella stessa Datx
codice:
SELECT TOP (100) PERCENT
Nomx,
CONVERT(varchar(10), Datx, 102) AS gggg,
Orax,
(SELECT COUNT(Orax) AS cccc FROM dbo.T1 AS V2 WHERE (Nomx = V1.Nomx) AND (CONVERT(varchar(10), Datx, 102) = CONVERT(varchar(10), V1.Datx, 102)) AND (Orax < V1.Orax)) AS sequ
FROM dbo.T1 AS V1
GROUP BY Nomx, CONVERT(varchar(10), Datx, 102), Orax
Fatta la prima Vista ( Chiamimola V5 ) ne facciamo una secovda che incolonni
in 4 colonne i campi a seconda del numero sequ trovato
codice:
SELECT
Nomx,
gggg,
MAX(CASE WHEN sequ = 0 THEN Orax END) AS or1,
MAX(CASE WHEN sequ = 1 THEN Orax END) AS or2,
MAX(CASE WHEN sequ = 2 THEN Orax END) AS or3,
MAX(CASE WHEN sequ = 3 THEN Orax END) AS or4
FROM dbo.V5
GROUP BY Nomx, gggg
Dopo se preferisci puoi nidificare le 2 viste in una unica