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?
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.
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
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