在没有更多母公司之前,您如何正确地为每家母公司选择所有用户?
我正在使用SQL Server 2008 R2,我需要检查是否有@ParentID然后选择该公司的所有用户,如果该公司的@ParentID做同样的事情,广告无限?
感谢。我对Rollups完全不熟悉,但我只是尝试类似下面的内容来启动基本的查询想法。
USE [DB]
DECLARE @UserName VARCHAR(250) = 'crusher@abc.com'
DECLARE @ParentID INT = -1
WHILE (@ParentID <> 0)
BEGIN
SELECT @ParentID = CASE
WHEN ParentCompanyID IS NULL
THEN 0
ELSE ParentCompanyID
END
FROM User2Company a
LEFT JOIN dbo.CompanyInfo b ON a.CompanyID = b.CompanyID
LEFT JOIN dbo.widgets ON a.companyid = widgets.companyid
WHERE a.UserName = @UserName
PRINT @ParentID
END
--SELECT * FROM CompanyInfo
--WHERE CompanyID = 100274
--SELECT *
--FROM CompanyInfo
--WHERE CompanyID = 100273
注释代码只是一个假设的例子,说明原始查询的父公司ID为100274 ...然后公司发现父公司ID为100273 ......直到最终CompanyID 100273的列中的ParentCompanyID为0。
这是典型的吗?
第一个查询的DESIRED输出可能如下所示:
100274
100273
0
此时我会从那些公司ID中获取所有用户。
答案 0 :(得分:2)
通常使用递归CTE完成:
;WITH
tmp AS
(
SELECT CompanyID,
ParentCompanyID
FROM CompanyInfo
WHERE CompanyID = 100274
UNION ALL
SELECT com.CompanyID,
com.ParentCompanyID
FROM CompanyInfo com
INNER JOIN tmp tmp ON com.CompanyID = tmp.ParentCompanyID -- This is the recursive part
)
SELECT * FROM tmp
正如其他人所说,避免在SQL Server中使用循环。如果必须使用循环,99%的情况下您没有正确使用SQL Server。