不知道怎么问这个,因为我有点像数据库菜鸟,
我想做的是以下内容。
table tb_Company table tb_Division
我想退回有多个部门的公司,我不知道怎么做where子句。
SELECT dbo.tb_Company.CompanyID, dbo.tb_Company.CompanyName,
dbo.tb_Division.DivisionName FROM dbo.tb_Company INNER JOIN dbo.tb_Division ON
dbo.tb_Company.CompanyID = dbo.tb_Division.DivisionCompanyID
非常感谢任何帮助或链接。
答案 0 :(得分:1)
您需要另一个JOIN
,其中您只使用GROUP BY
和HAVING
条款返回具有多个分部的公司。
您可以阅读分组here
将选定的一组行分组到一个 一组汇总行的值 一个或多个列或表达式。一 为每个组返回一行。 SELECT中的聚合函数 条款清单提供 有关每个组的信息 个别行。
SELECT dbo.tb_Company.CompanyID
, dbo.tb_Company.CompanyName
, dbo.tb_Division.DivisionName
FROM dbo.tb_Company
INNER JOIN dbo.tb_Division ON dbo.tb_Company.CompanyID = dbo.tb_Division.DivisionCompanyID
INNER JOIN (
SELECT DivisionCompanyID
FROM dbo.tb_Division
GROUP BY
DivisionCompanyID
HAVING COUNT(*) > 1
) d ON d.DivisionCompanyID = dbo.tb_Company.CompanyID
答案 1 :(得分:0)
怎么样?
WITH COUNTED AS
(
SELECT C.CompanyID, C.CompanyName, D.DivisionName,
COUNT() OVER(PARTITION BY C.CompanyID) AS Cnt
FROM dbo.tb_Company C
INNER JOIN dbo.tb_Division D ON C.CompanyID = D.DivisionCompanyID
)
SELECT *
FROM COUNTED
WHERE Cnt > 1
使用其他解决方案(两次加入Division
表),可以在大量插入负载下返回单个公司/部门。
如果在第一次连接发生的时间和第二次连接的时间(使用Division
/ group by
)之间插入having
表中的行,则第一行{ {1}} join将返回一行。但是,第二个将返回2的计数。
答案 2 :(得分:0)
另一种选择......
SELECT c.CompanyId, c.CompanyName, d.DivisionName
FROM tbl_Company c
INNER JOIN tbl_Division d ON c.CompanyId=d.DivisionCompanyId
GROUP BY c.CompanyId, c.CompanyName, d.DivisionName
HAVING COUNT(*) > 1
答案 3 :(得分:0)
怎么样......
SELECT dbo.tb_Company.CompanyID,
dbo.tb_Company.CompanyName,
FROM dbo.tb_Company
WHERE (SELECT COUNT(*)
FROM dbo.tb_Division
WHERE dbo.tb_Company.CompanyID =
dbo.tb_Division.DivisionCompanyID) > 1;