2 votes

Requête pour trouver tous les fournisseurs qui offrent tous les services

Disons que nous avons une table provider_service qui stocke tous les services offerts par les fournisseurs.

Table Provider_Service : ProviderID | ServiceId

Ensuite, nous avons un paramètre de type table_valued @idServices avec une liste de services.

J'ai besoin d'une requête pour SQLSERVER pour trouver tous les fournisseurs qui offrent tous les services spécifiés dans le paramètre de valeur de la table.

2voto

Joe Stefanelli Points 72874
SELECT ps.ProviderID
    FROM Provider_Service ps
        INNER JOIN @idServices i
            ON ps.ServiceId = i.ServiceId
    GROUP BY ps.ProviderID
    HAVING COUNT(DISTINCT ps.ServiceId) = (SELECT COUNT(*) FROM @idServices)

1voto

sll Points 30638
SELECT ps.* 
FROM Provider_Service ps
INNER JOIN @idServices s ON s.ServiceId = ps.ServiceId

0voto

billinkc Points 23616

En supposant que je comprenne votre question et que le champ dans le TVP est ServiceId, il s'agit simplement d'une jointure interne entre les deux.

SELECT
    *
FROM
    Provider_Service PS
    INNER JOIN
        @idServices IS
        ON IS.ServiceId = PS.ServiceId

0voto

Andomar Points 115404

Une solution est la double négation : tous les fournisseurs pour lesquels il n'existe aucun service qui n'est pas desservi par ce fournisseur. En SQL :

select  distinct ps1.ProviderID
from    Provider_Service ps1
where   not exists
        (
        select  *
        from   @idServices is
        where  not exists
               (
               select  *
               from   Provider_Service ps2
               where  ps2.ProviderID = ps1.ProviderID
                      ps2.ServiceId = is.ServiceID
               )
        )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X