2017-08-04 1 views
0

Voici un exemple de deux tables et je souhaite créer une vue en tant que résultat final. Il y a deux tables en entrée de la vue, une qui a des pays avec un identifiant de localisation et l'autre des noms de lieux, je veux les rejoindre et ensuite faire un cas pour remplacer plusieurs comptes avec une seule entrée. Toute aide est appréciée.Requête SQL et instruction case pour afficher plusieurs entrées en joignant deux tables

Here is the screenshot of how tables look like, Table Entity and Table Location as input tables to the view

Je pensais d'abord d'obtenir de multiples chefs d'accusation emplacement Id de l'entité table, puis créez une instruction Select Case, mais sans succès, voici le projet de code.

select 
    Country, count(locationid), 
    case LocationName 
     when Cnt > 1 then 'Mulitple offices' 
     when Cnt = 0 then 'Unknown Location' 
     else LocationName 
    end 
from 
    Entity 
group by 
    Country 

MISE À JOUR: Je viens de faire un SQLFiddle (très pratique) et a réalisé les deux solutions de @Gordon et @ P.Eh mais avec quelques problèmes. Voir spécifique dans les commentaires ci-dessous

+2

Cas _expression_, pas _statement_. – jarlh

Répondre

0

je pense que c'est ce que vous vouliez:
- quand LOCATION_ID à emplacement Table est NULL ou puis 'Emplacement inconnu'

select 
    COU.Country, 
    case 
     when COU.pleace is null OR COU.pleace=0 then 'Unknow location' 
     when COU.number_of_pleaces > 1 then 'Multiple offices' 
     else coalesce(LOC.Location_name,'cound not math location') 
    end as [location name] 
from 
    ( select country, 
      sum(1) as number_of_pleaces, 
      max(Location_id) as pleace 
     from @entity 
     group by country 
    ) COU 
    left join 
    @location LOC 
     on LOC.Location_id = COU.pleace 
     and COU.number_of_pleaces = 1 
+0

Merci @ P.ejH, j'essaie ce code, le code: 'max (location_id) car Pleace jette l'identificateur en plusieurs parties impossible à trouver !, toute aide est appréciée – Abdul

+0

Testé à nouveau dans SQLFiddle (voir le lien ci-dessus en question), en particulier pour le Royaume-Uni, il jette Multiple Offices qui est faux. sinon, ça marche bien. Pouvons-nous tweek un peu pour écrire 'Unkown Location' si l'emplacement locationid est zéro – Abdul

0

Vous semblez vouloir quelque chose comme ceci:

select e.Country, count(l.locationId), 
     (case when count(l.locationId) > 1 Then 'Mulitple offices' 
      when count(l.locationId) = 0 then 'Unknown Location' 
      else max(l.LocationName) 
     end) 
from Entity e left join 
    Location l 
    on e.locationId = l.locationId 
group by e.Country; 
+0

Merci Gordon pour votre réponse, je pense que c'est assez proche. la requête retourne plusieurs bureaux où elle trouve count> 2 mais pour les autres cas c'est tout NULL. Ne sachez pas quel est le problème. – Abdul

+0

Je ne suis pas si inquiet à propos de 'Case e.locationID = 0' mais pourquoi il ne reçoit pas le max (l.locationName)? – Abdul

+0

@Abdul. . . Peut-être qu'aucun pays n'a un seul endroit. –