Sql 为什么我的交叉申请栏没有出现?
我想我可能问错了问题,但问题来了。我有一个相当复杂的查询,我知道我需要做一些交叉应用程序来使其工作,但是当我创建了工作正常的初始查询,然后在最后添加了一个交叉应用程序时,我的交叉应用程序中指定的列在我执行查询时不会显示出来。真奇怪。我肯定我的语法有问题,但我不知道它是什么 以下是我的查询的简化版本:Sql 为什么我的交叉申请栏没有出现?,sql,sql-server,cross-apply,Sql,Sql Server,Cross Apply,我想我可能问错了问题,但问题来了。我有一个相当复杂的查询,我知道我需要做一些交叉应用程序来使其工作,但是当我创建了工作正常的初始查询,然后在最后添加了一个交叉应用程序时,我的交叉应用程序中指定的列在我执行查询时不会显示出来。真奇怪。我肯定我的语法有问题,但我不知道它是什么 以下是我的查询的简化版本: /* I have some ctes */ WITH cte AS (SELECT * FROM A WHERE A.id > 50) /* Normal query */ SELECT
/* 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
是否不允许我在与交叉应用相同的查询中使用联接?使用CTE有什么问题吗?我的查询运行良好,没有交叉应用。交叉应用中的SELECT语句本身运行良好。我没有收到语法错误
在这个假设的例子中,我的输出是
b1
b2
b3
17
2.
40
实际上,您需要将其包含在
SELECT
子句中<代码>选择b1、b2、b3、Family.Family(您还应该完全限定列b1、b2、b3
来自哪个表)。哦,嘿,有那么简单吗?谢谢我会试试看。(是的,我完全限定了我的其他列,但这是一个主要简化的示例)我认为是因为您没有在主查询中从cross apply输出数据。我的意思是应该选择b1,b2,b3,Family.Family