Dot*_*row 15 sql t-sql sql-server sql-server-2008 sql-server-2008-r2
我有一个存储过程,我试图选择表的所有列表1.还有另一个表使用Table1主键作为外键.我想用这个选择计算这个外键表中的记录数,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:
列'dbo.Table1.NameLang1'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
请建议如何解决这个问题?
Tec*_*hDo 32
请试试:
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
Run Code Online (Sandbox Code Playgroud)
使用新列进行排序
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
Run Code Online (Sandbox Code Playgroud)
提供列NameLang1并VacancyCount具有相同的数据类型.
You're doing grouping wrong. You need to use all the columns from Table 1 in SELECT instead of '*' and in GROUP BY clause as well.
Or you can try a different approach like this:
SELECT *
FROM Table1 hc
LEFT JOIN (SELECT CompanyID, COUNT(*) cnt FROM Table2 GROUP BY CompanyID) hv
on hc.CompanyID = hv.CompanyID
WHERE hc.Deleted = 0
ORDER BY NameLang1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30982 次 |
| 最近记录: |