Je veux obtenir la somme d'une colonne alphanumérique. Je veux ajouter des valeurs numériques et renvoyer des valeurs de colonne s'il n'est pas numérique. Ce que j'ai fait est un cas d'ajout un donc je suppose que toutes les valeurs numériques seront ajoutées et si les valeurs sont dans mais je reçois p> Erreur lors de la conversion de type de données NvarchaRar en numérique. P>
blockQuote> p> lorsque code> qui ressemble à ce
( 'Cl', 'HS', 'HV', 'ML', 'SL', 'VL', 'VL', 'HC', 'S', 'S', '*') CODE> Il sera retourné tel quel. P >
3 Réponses :
Ceci ressemble à la syntaxe SQL Server. Je recommanderais d'utiliser try_convert () code>:
Voulez-vous revenir comme valeur SI NON NUMÉRIQUE SIGNIFIÈME Retour ('Cl', 'HS', 'HV', 'ML', 'SL', 'VL', 'S' ',' " ) code> est-ce possible
@guradio. . . Je ne comprends pas la logique. Voulez-vous un numéro ou une chaîne comme valeur de retour? Les échantillons de données et les résultats souhaités dans la question aideraient.
Je veux que le résultat soit la somme de la valeur numérique si elle est numérique si elle n'est pas numérique puis renvoyer la valeur actuelle (que nous ayons l'une des valeurs du ( ("CL '," HS "," ML " , 'SL', 'vl', 'hc', 's', '*') code>)
On dirait que votre agrégation de somme est hors de propos. Vous ne devez que si la condition dans la déclaration de cas est vraie. Essayez ceci:
select cast(SUM(cast(intAllocatedResourceperDivision as decimal(18,2))) as varchar) from YOUR_TABLE where ISNUMERIC(intAllocatedResourceperDivision) = 1 UNION ALL select intAllocatedResourceperDivision from YOUR_TABLE where ISNUMERIC(intAllocatedResourceperDivision) = 0
vouloir revenir tel quel est la valeur si pas le sens numérique retour ("CL '," HS "," HV "," ML "," SL "," VL "," HC "," * ") Est-ce possibiliser
Il est possible d'une approche différente. Vous devez diviser les données en 2 jeux de données différents (numériques et non numériques), effectuer l'agrégation, puis combiner les deux jeux de données ensemble à nouveau. J'ai mis à jour ma réponse pour également refléter cela.
Essayez ceci:
select 'CL' as intAllocatedResourceperDivision into #tmp union select 'HS'union select 'HV'union select 'ML'union select 'SL'union select 'VL'union select 'HC'union select 'S'union select '*'union select '1'union select '4' select CAST(SUM(ISNULL(CAST(intAllocatedResourceperDivision AS DECIMAL),0.00)) AS nvarchar(250)) as intAllocatedResourceperDivision from #tmp where intAllocatedResourceperDivision NOT IN ('CL','HS','HV','ML','SL','VL','HC','S','*') union select intAllocatedResourceperDivision from #tmp where intAllocatedResourceperDivision IN ('CL','HS','HV','ML','SL','VL','HC','S','*')
vouloir revenir tel quel est la valeur si pas le sens numérique retour ("CL '," HS "," HV "," ML "," SL "," VL "," HC "," * ") Est-ce possibiliser
Tagez votre question avec la base de données que vous utilisez. Les échantillons de données et les résultats souhaités aideraient également.
@Gordonlinoff mise à jour