web-dev-qa-db-fra.com

Obtenir le nombre d'enregistrements dans la table enfant à l'aide d'une instruction SELECT

J'ai une procédure stockée dans laquelle j'essaie de sélectionner toutes les colonnes d'une table de table 1. Il y a une autre table qui utilise la clé primaire Table1 comme clé étrangère. Je souhaite compter le nombre d'enregistrements dans cette table de clé étrangère avec celle que vous avez sélectionnée comme suit:

SELECT *, count(*) VacancyCount
    FROM Table1 hc
    LEFT JOIN Table2 hv
    on hc.CompanyID = hv.CompanyID  
    WHERE hc.Deleted = 0
    group by hc.CompanyID
    ORDER BY NameLang1

mais cela donne une erreur:

La colonne 'dbo.table1.namelang1' n'est pas valide dans la liste Sélectionner car il n'est pas contenu dans une fonction d'agrégat ni dans la clause du groupe.

S'il vous plaît suggérer comment résoudre ce problème?

15
DotnetSparrow

S'il vous plaît essayez:

select 
    *,
    (select COUNT(*) from Table2 hv where hv.CompanyID=hc.CompanyID) VacancyCount
from Table1 hc
where
    hc.Deleted = 0
order by hc.NameLang1, VacancyCount desc

pour commander à l'aide de la nouvelle colonne

select * from(
    select 
        *,
        CONVERT(NVARCHAR(100), (select COUNT(*) from Table2 hv where hv.CompanyID=hc.CompanyID)) VacancyCount
    from Table1 hc
    where
        hc.Deleted = 0
)x
Order by CASE WHEN @OrderByParam = 1 THEN NameLang1 ELSE VacancyCount END

Fourni la colonne NameLang1 et VacancyCount sont du même type de données.

32
TechDo

Vous devrez énumérer toutes les colonnes du groupe par clause
[.____] Ces colonnes sont celles de l'SELECT * bit.

Ce serait correct ANSI SQL de toute façon.

SELECT * lui-même est mauvais quand même: il est toujours préférable de répertorier explicitement les colonnes

2
gbn

Essayez de cette façon inclure la liste de colonnes en groupe par

 SELECT column1,column2,column3..,NameLang1,count(*) VacancyCount
FROM Table1 hc
LEFT JOIN Table2 hv
on hc.CompanyID = hv.CompanyID  
WHERE hc.Deleted = 0
group by column1,column2,column3
ORDER BY NameLang1
0
Arun Kumar