Ram*_*Ram 2 sql-server row inner-join count
我有以下查询:
SELECT
h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName,s.pagepath
FROM
tblSiteRolePermissions p
INNER JOIN
tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN
tblHelp h ON s.pkSitePageId=h.fkSitePageId
WHERE
(p.fkRoleId = 4 AND p.ViewOnly = 1)
ORDER BY
s.pkSitePageId
Run Code Online (Sandbox Code Playgroud)
我想从中得到好处tblSiteRolePermissions.我试过Count但它抛出一些错误,如:
消息8120,级别16,状态1,行1
列'tblHelp.HelpContent'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
请帮帮我,让我知道我哪里错了.
更新
这是我正在尝试的代码:
SELECT
count(p.pkRolePermissionId),
h.helpcontent, s.MenuID, s.pkSitePageId, s.PageAliasName,
s.SitePageName, s.pagepath
FROM
tblSiteRolePermissions p
INNER JOIN
tblSitePages s ON p.fkSitePageId = s.pkSitePageId
INNER JOIN
tblHelp h ON s.pkSitePageId = h.fkSitePageId
WHERE
(p.fkRoleId = 4 AND p.ViewOnly = 1)
ORDER BY
s.pkSitePageId
Run Code Online (Sandbox Code Playgroud)
如果使用聚合函数,则需要GROUP BY在SELECT语句中的其余字段中使用不在聚合中的子句.与此类似:
SELECT count(p.pkRolePermissionId) CountRolePermission,
h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
GROUP BY h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
ORDER BY s.pkSitePageId
Run Code Online (Sandbox Code Playgroud)
如果你想要所有行的计数,那么你可以使用这样的东西:
SELECT NumRows.TotalCount,
h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
cross join
(
SELECT count(*) TotalCount
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
) NumRows
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
ORDER BY s.pkSitePageId
Run Code Online (Sandbox Code Playgroud)
或者您可以在查询中使用CTE,类似于:
;with cte as
(
SELECT h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath
from tblSiteRolePermissions p
INNER JOIN tblSitePages s
ON p.fkSitePageId = s.pkSitePageId
inner join tblHelp h
on s.pkSitePageId=h.fkSitePageId
WHERE (p.fkRoleId =4 and p.ViewOnly=1)
)
select h.helpcontent,
s.MenuID,
s.pkSitePageId,
s.PageAliasName,
s.SitePageName,
s.pagepath,
(select count(*) from cte) as Total
from cte
Run Code Online (Sandbox Code Playgroud)