Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么我的交叉申请栏没有出现?_Sql_Sql Server_Cross Apply - Fatal编程技术网

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