我有一个包含层次结构数据的表 - 类似于:
childID | parentID
____________________
1 | 5
5 | 9
9 | 20
2 | 4
3 | 7
7 | 8
8 | 8
20 | 20
4 | 4
8 | 8
Run Code Online (Sandbox Code Playgroud)
期望的输出:

我创建了一个递归CTE,它找到了我的顶部fatherID.
就像是:
;WITH cte AS (
SELECT a.childID
,a.parentID
,1 AS lvl
FROM [Agent_Agents] a
WHERE a.childID = 214 //<==== value to begin with !! - thats part the problem
UNION ALL
SELECT tmp.childID
,tmp.parentID
,cte.lvl+1
FROM [Agent_Agents] tmp
INNER …Run Code Online (Sandbox Code Playgroud) 我有这个查询(伪代码)
SELECT
a = 1,
b = 2,
c = CASE
WHEN ISNULL(
(SELECT MONTH(GETDATE()) <---long query
), 0) = 0 THEN 'found'
ELSE
SELECT MONTH(GETDATE()) <--- repeated long query
END
Run Code Online (Sandbox Code Playgroud)
问题是SELECT MONTH(GETDATE())实际上这是很长的查询.
这个"长表达式"是否有任何解决方法不会在查询中出现两次?
PS
我有一个计算SELECT MONTH(GETDATE())外部变量的解决方案......但我想弄清楚是否有内联解决方案.