2011-04-05 6 views
0

J'ai un nombre (disons 100 000). Je veux diviser ce nombre entre des intervalles donnés de 15 000 et 19 900. Je m'attends à ce que les résultats se situent entre 15 000 et 19 900. J'ai besoin d'une requête SQL/fonction pour faire cette tâche.Requête SQL pour diviser un nombre dans un intervalle donné

Exemple: Si je dois diviser 100 000 entre les intervalles de 15.000 et 19.900 les résultats devraient ressembler à ceci:

15100.00 
16750.00 
19365.22 
18254.85 
15987.65 
14542.28 

S'il vous plaît voir que la somme de toutes ces valeurs est égale à 100.000 Merci à l'avance .

+5

Pouvez-vous fournir quelques exemples? On ne sait pas ce que vous essayez d'atteindre. – cairnz

+0

Je ne comprends pas la question. Pourriez-vous ajouter un exemple de la façon dont vous voulez que cela fonctionne? – JenEriC

+0

Quels sont les «résultats» que vous attendez? –

Répondre

7

Si le dernier numéro sélectionné n'a pas besoin d'être dans la plage que vous avez spécifiée (selon votre exemple), le suivant retournera certains nombres aléatoires en additionnant le total donné.

DECLARE @LowBound FLOAT 
DECLARE @HighBound FLOAT 
DECLARE @Total FLOAT 

SET @LowBound = 15000 
SET @HighBound = 19900 
SET @Total = 100000 

;WITH q AS (
    SELECT [Value] = @LowBound + (@HighBound - @LowBound) * RAND(CHECKSUM(NEWID())) 
      , [RunningTotal] = CAST(0.00 AS FLOAT) 
    UNION ALL 
    SELECT [Value] = @LowBound + (@HighBound - @LowBound) * RAND(CHECKSUM(NEWID())) 
      , [RunningTotal] = CAST((q.[RunningTotal] + [Value]) AS FLOAT) 
    FROM q   
    WHERE q.[RunningTotal] < @Total 
) 
SELECT CASE WHEN [RunningTotal] < @Total 
       THEN [Value] 
       ELSE [Value] - ([RunningTotal] - @Total) 
     END AS Result 
FROM (
      SELECT [Value] 
        , [RunningTotal] = [Value] + [RunningTotal] 
      FROM q 
     ) q 
WHERE [RunningTotal] - [Value] <= @Total   
+3

Vous donner des crédits pour quelque chose qui semble complètement sans sens à résoudre :) – cairnz

+0

@cairnz, lol. OP ne semble pas visiter si souvent mais il pourrait en effet faire la lumière sur le * pourquoi * de sa question. –

+0

merci beaucoup, c'est ce que je m'attendais. – Nagesh

Questions connexes