问题描述
我想我可能问错了问题,但它就是这样。我有一个相当复杂的查询,我知道我需要做一些 CROSS APPLYs 才能使它工作,但是当我创建我的初始查询运行良好,然后在最后添加一个 CROSS APPLY 时,我的 CROSS APPLY 中的指定列不t 在我执行查询时出现。有点奇怪。我确定我的语法有问题,但我不知道它是什么。
这是我的查询的简化版本:
/* I have some ctes */
WITH cte AS (SELECT * FROM A WHERE A.id > 50)
/* normal query */
SELECT b1,b2,b3
FROM B
INNER JOIN cte ON b.b1 = cte.b1
INNER JOIN X on b.x1 = X.x1
/* Cross Apply,this is my real code */
CROSS APPLY (
SELECT TOP 1 (Family.GroupID) AS "Family"
FROM (
SELECT HIFIS_Clients.ClientID,HIFIS_Groups.GroupID,HIFIS_People_Groups.GroupHeadYN,HIFIS_People_Groups.DateStart,ISNULL(HIFIS_People_Groups.DateEnd,CURRENT_TIMESTAMP) AS "DateEnd"
FROM HIFIS_Clients
INNER JOIN HIFIS_People ON HIFIS_Clients.PersonID = HIFIS_People.PersonID
INNER JOIN HIFIS_People_Groups ON HIFIS_People.PersonID = HIFIS_People_Groups.PersonID
INNER JOIN HIFIS_Groups ON HIFIS_People_Groups.GroupID = HIFIS_Groups.GroupID
WHERE HIFIS_Groups.GroupTypeID = 1
) Family
WHERE Family.ClientID = B.ClientID
ORDER BY Family.GroupID
) Family
我是否不允许在与 CROSS APPLY 相同的查询中使用 JOINS?使用 ctes 有什么问题吗?我的查询在没有 CROSS APPLY 的情况下运行良好。 CROSS APPLY 中的 SELECT 语句本身运行良好。我没有收到语法错误...
b1 | b2 | b3 |
---|---|---|
17 | 2 | 40 |
所以没有“家庭”栏。为什么不见了?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)