J'ai besoin de prendre le nombre de données d'une table et si le nombre est supérieur à 1, je dois obtenir le résultat comme «OUI» et compter égal à 1, je dois obtenir le résultat comme «NON».
Requête: p>
Select item, case when count( item_des) > 1 then 'REassigned Yes' when count(item_des) = 1 then 'REassigned NO' else 'N/A' end from material where item in ('23','24,'25') and item_des like ('Cpu%to%move%') group by item;
Chaque numéro d'article a plusieurs entrées avec la colonne items_des
, et je dois prendre le décompte de la colonne item_des
où item_des like ('Cpu% to% move%')
et faites le comptage et imprimez le résultat en fonction du nombre.
3 Réponses :
Cela répond à la version originale de la question.
Vous pouvez utiliser une expression case
:
select . . . , (case when count(*) > 1 then 'YES' else 'NO' end)
J'ai réorganisé ma question, aidez-moi s'il vous plaît
Vous devez utiliser l'agrégation conditionnelle comme suit:
case when sum(case when item_des like ('Cpu%to%move%') then 1 else 0 end) > 1 then 'REassigned Yes' when sum(case when item_des like ('Cpu%to%move%') then 1 else 0 end) = 1 then 'REassigned NO' else 'N/A' end
Il n'est peut-être pas évident pour l'OP que la condition doit être supprimée de la clause where
pour voir que cela a un effet?
Si le problème est que votre requête actuelle n'affiche jamais «N / A», car le filtre exclut tous les éléments qui n'ont pas de description correspondante, alors comme @Tajesh le dit, vous pouvez déplacer la condition. Vous pouvez toujours faire un comptage, ce qui semble plus logique:
select item, case when cnt > 1 then 'REassigned Yes' when cnt = 1 then 'REassigned NO' else 'N/A' end from ( select item, count(case when item_des like 'Cpu%to%move%' then item_des end) as cnt from material where item in (23, 24, 25) group by item )
Le cas interne lorsque item_des comme 'Cpu% to% move%' puis item_des end
a un implicite else null
, mais vous pouvez le rendre explicite si vous préférez. La fonction count ()
ne compte pas les valeurs nulles, elle ne compte donc que les lignes où la description correspond au modèle - celles qui ne se résolvent pas en null, ce qui n'est pas inclus dans le décompte. P >
Si item
est un nombre, alors le filtre doit être:
where item in (23, 24, 25)
Si vous ne voulez pas répéter la logique de la casse interne, alors vous pouvez utiliser un CTE ou une vue en ligne:
select item, case when count(case when item_des like 'Cpu%to%move%' then item_des end) > 1 then 'REassigned Yes' when count(case when item_des like 'Cpu%to%move%' then item_des end) = 1 then 'REassigned NO' else 'N/A' end from material where item in ('23', '24', '25') group by item;
Vous ne verrez toujours rien si un élément n'apparaît pas du tout dans le tableau; il existe des moyens de contourner cela, mais il n'est pas clair si cela peut arriver ou ce que vous voulez voir si cela se produit.
Quel est le problème avec la requête que vous avez affichée? Cela semble faire ce que vous demandez. En l'absence de données brutes, de résultats attendus ou de sortie actuelle, il est difficile de dire.