Numero decimali su Viste SQL2000

martedì 19 febbraio 2008 - 13.10

fotw Profilo | Newbie

Ho un problemi sulla creazione di una vista su SQL2000 Server

Dovrei visualizzare in modo variabile il numero di decimali in base
ad un parametro ma non ci riesco.
Sul DB la colonna ha sempre 4 decimali (DECIMAL(16,4)
ma devo visualizzarne un numero variabile compreso tra 0 e 4

La vista viene utilizzata successivamente da Crystal Report
(potrei utilizzare campi formule e gestire il tutto da Crystal
ma vorrei evitarlo e demandare tutto a SQL)


1) Primo tentativo:

SELECT CASE ISNULL(ditta.numdec, 0)
WHEN 0 THEN CONVERT(DECIMAL(16), Progressivi.QTA1)
WHEN 1 THEN CONVERT(DECIMAL(16,1), Progressivi.QTA1)
WHEN 2 THEN CONVERT(DECIMAL(16,2), Progressivi.QTA1)
WHEN 3 THEN CONVERT(DECIMAL(16,3), Progressivi.QTA1)
WHEN 4 THEN CONVERT(DECIMAL(16,4), Progressivi.QTA1)
END AS QTA1
FROM Progressivi
INNER JOIN ditta
ON ditta.coddit = Progressivi.coddit

ma questa select restituisce sempre 4 decimali, forse considera sempre il
numero massimo dei decimali previsti per avere una coerenza totale

2) Secondo tentativo:

SELECT STR(Progressivi.QTA1, 16, ISNULL(ditta.numdec, 0)) AS QTA1
FROM Progressivi
INNER JOIN ditta
ON ditta.coddit = Progressivi.coddit

ma questa colonna viene enterpretata come stringa (almeno su Crystal Report) e non mi
permette di fare operazioni di formattazione e somma

Esiste un'altra possibilità, ho provato a cerca un funzione numerica ma non l'ho trovata

Grazie e Ciao

lbenaglia Profilo | Guru

>ma questa select restituisce sempre 4 decimali, forse considera
>sempre il numero massimo dei decimali previsti per avere una coerenza totale

Una colonna può avere 1 solo data type; non è possibile avere un data type diverso per ogni riga!
Osserva il seguente esempio:

SELECT 10 AS Col UNION ALL SELECT 10.1 UNION ALL SELECT 10.12 UNION ALL SELECT 10.123 UNION ALL SELECT 10.1234; /* Output: Col --------- 10.0000 10.1000 10.1200 10.1230 10.1234 (5 row(s) affected) */

Come vedi tutti i valori vengono implicitamente castati in decimal con la precisione maggiore.
Se non puoi castare i valori a stringa, l'unica alternativa consiste nel "giocare" lato client (quindi in Crystal Reports).

>Grazie e Ciao
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