2011-10-22 3 views
-1

Dans ma table l'un des classé est msg. Basé cela a classé deux où la condition. La condition estEcriture d'une seule requête pour multi-critère où condition en utilisant la même colonne même table

where msg like '%fatal%' or msg like '%exception%' or msg like '%fopen%' 

then Select telco , 
Sum(Case when a= '1' then 1 else 0 end) as a, 
Sum(Case when b= '2' then 1 else 0 end) as b, 
Sum(Case when c= '3' then 1 else 0 end) as c, 


where msg not like '%fatal%' or msg not like '%exception%' or msg not like '%fopen%' 
then Select telco , 
Sum(Case when a= '1' then 1 else 0 end) as a_e, 
Sum(Case when b= '2' then 1 else 0 end) as b_e, 
Sum(Case when c= '3' then 1 else 0 end) as c_e, 

From temp_inbox group by t 

ici a, b, nom de la colonne c

Je veux écrire l'exigence d'une requête ci-dessus. Si j'écris deux requête basée sur deux lorsque l'état puis-je obtenir résultat, mais je veux écrire seule requête et montrer mon résultat de la manière suivante:

a b c a_e b_e c_e 

5 6 7 10 4  10 
1 2 7  45 20 2 

échantillon de données:

  a b c msg 

     1 0 0 fatalerror 

     0 0 3 successed 
     1 0 0 exception 
     0 2 0 successful 
+0

pouvez-vous s'il vous plaît publier quels sont les deux questions? L'exemple de requête que vous avez donné est hors de toute norme SQL. Je ne peux vraiment pas comprendre ce que vous essayez de faire ici. –

+0

s'il vous plaît lire sql somme et cas tutoriel alors vous comprendrez ce que j'ai dit – salma

+0

pouvez-vous s'il vous plaît poster un lien vers le tutoriel ... et n'est-ce pas la même question: http://stackoverflow.com/questions/7857954/écriture-une-seule-requête-pour-mutliple-requêtes-avec-même-où-condition-même-table le –

Répondre

1
select telco, 
sum(
    case when (msg like '%fatal%' or out_msg like '%exception%' or out_msg like '%fopen%') and a = '1' 
    then 1 else 0 end 
) as a, 
sum(
    case when (msg like '%fatal%' or out_msg like '%exception%' or out_msg like '%fopen%') and a = '2' 
    then 1 else 0 end 
) as b, 
sum(
    case when (msg like '%fatal%' or out_msg like '%exception%' or out_msg like '%fopen%') and a = '3' 
    then 1 else 0 end 
) as c, 
sum(
    case when (msg not like '%fatal%' or out_msg not like '%exception%' or out_msg not like '%fopen%') and a = '1' 
    then 1 else 0 end 
) as a_e, 
sum(
    case when (msg not like '%fatal%' or out_msg not like '%exception%' or out_msg not like '%fopen%') and a = '2' 
    then 1 else 0 end 
) as b_e, 
sum(
    case when (msg not like '%fatal%' or out_msg not like '%exception%' or out_msg not like '%fopen%') and a = '3' 
    then 1 else 0 end 
) as c_e 

From temp_inbox group by t 

ou vous pouvez utiliser le cas imbriqué quand insted

+0

non monsieur, je veux sommer un, b, colonne colonne colonne msg condition – salma

+0

@salma pourriez-vous s'il vous plaît poster les exemples de données dans votre tableau que vous exécutez cette requête par rapport à becouse je ne peux pas comprendre votre requête. –

+0

données d'échantillon a été donné – salma

0

vous pouvez utiliser une instruction UNION pour joindre deux requêtes avec le même nombre de colonnes:

Je ne sais pas ce que vous essayez de faire, mais une instruction UNION de la table que vous avez mentionné ressemblerait à quelque chose comme ceci:

select sum(a), message from telco where message like '%fatal%' 
UNION 
select sum(a), message from telco where message not like '%fatal%' 
+0

Je veux un résultat individuel en deux colonnes, une pour le message comme '% fatal%' et une autre pour le message pas comme '% fatal%'. mais vous interrogez donne un résultat pour somme "message comme '% fatal%' et message pas comme '% fatal%"' – salma

Questions connexes