2017-07-17 1 views
0

J'ai une table avec les données ci-dessousopération arithmétique sur la valeur de la ligne

Tid Did value 
------------------ 
1  123 100 
1  234 200 
2  123 323 
2  234 233 

Tous les tids ont DIDs que 123 et 234. Ainsi, pour chaque tid ayant DIDs 123 et 234 Je veux calculer value of did 123/value of did 234 * 100 à savoir 100/200 * 100 Pour tid 2 il sera value of did 123/value of did 234 * 100 * 100-à-dire

323/233

Le tableau de sortie sera

Tid result 
------------------ 
1  100/200 * 100 
2  323/233 * 100 

Toute aide?

Répondre

0
select tid, 
     100 * sum(case when did = 123 then value end)/
      sum(case when did = 234 then value end) 
from your_table 
group by tid 
having sum(case when did = 234 then value end) > 0 
+0

En cela, comment gérer la division par zéro erreur si la valeur de 234 est fait égal à zéro – Ritesh

+0

Que faut-il alors? Voulez-vous exclure ces enregistrements de votre résultat? –

+0

Oui, je veux exclure les cas que j'ai pris en charge en ajoutant où clause où est la valeur <> 0.Est-ce que c'est correct? – Ritesh

1

JOIN les lignes "123" avec les lignes "234":

select t123.tid, t123.value * 100/t234.value 
from 
    (select tid, value from tablename where value = 123) t123 
join 
    (select tid, value from tablename where value = 234) t234 
    on t123.tid = t234.tid 
0

JOIN, tout en ON

select t123.tid, t123.value * 100/t234.value 
from tablename t123 
join tablename t234 on t123.tid = t234.tid and t123.did = 123 and t234.did = 234 
0

Voici la requête. Nous pouvons utiliser la jointure interne pour l'atteindre.

SELECT T1.Tid,(T1.value/T2.value)*100 AS Result 
FROM Table_1 AS T1 
INNER JOIN 
Table_1 AS T2 
ON (T1.Tid = T2.Tid) 
AND (T1.Did <> T2.Did) 
AND T1.Did = 123