Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 server SQL Server与左侧外部联接的交叉联接以及与分区摘要的交叉联接_Sql Server - Fatal编程技术网

Sql server SQL Server与左侧外部联接的交叉联接以及与分区摘要的交叉联接

Sql server SQL Server与左侧外部联接的交叉联接以及与分区摘要的交叉联接,sql-server,Sql Server,我希望使用交叉联接来确保为科目表和会计期间的每个组合获取行。下面的查询在某种程度上是有效的,但我需要细化总和(金额)以仅包含相关数据。第一个示例返回一个结果。第二个弹出一个错误,我无法解决 这(有点)管用 您不需要在第二个查询中包含GROUPBY,窗口中的分区在某种意义上完成了分组的工作。因此,总和(总帐金额)实际上与“外部”分组没有关联,这就是为什么会出现错误。您的查询看起来可能会返回您想要的内容为什么要混合使用ANSI-89和ANSI-92语法?您有交叉连接coa,gl为什么对象gl必须使用

我希望使用交叉联接来确保为科目表和会计期间的每个组合获取行。下面的查询在某种程度上是有效的,但我需要细化总和(金额)以仅包含相关数据。第一个示例返回一个结果。第二个弹出一个错误,我无法解决

这(有点)管用


您不需要在第二个查询中包含GROUPBY,窗口中的分区在某种意义上完成了分组的工作。因此,总和(总帐金额)实际上与“外部”分组没有关联,这就是为什么会出现错误。您的查询看起来可能会返回您想要的内容

为什么要混合使用ANSI-89和ANSI-92语法?您有
交叉连接coa,gl
为什么对象
gl
必须使用ANSI-89语法?示例数据和预期结果(而非图像)将极大地帮助我们帮助您。这张图片对于解释你的底层数据是什么,或者你想要的结果是什么几乎没有什么作用。我还建议使用一些空白和换行符。根本没有空格可说,而且断线看起来有点偶然(例如,在第二个查询中,在<代码>的中间,按分区)。在第二个查询中,似乎还缺少右括号(
);所以我很惊讶它会给你这个错误,而不是
不正确的语法接近
。我已经纠正了括号问题,谢谢你指出这一点。但是,同样的错误。您只查找fiscalId=311,没有交叉连接的意义。您只需要表格coa,并按字段分组。
SELECT
    gl.companyId, gl.profitCenterId, gl.projectId, gl.projectGroupId,    
    gl.fiscalId, gl.coaId,
    SUM(gl.amount) sumAmountForRow
FROM 
    fiscal
CROSS JOIN 
    coa, gl
WHERE 
    gl.coaId >= 40000 AND gl.coaId < 50000 AND gl.fiscalId = 311
GROUP BY   
    gl.companyId, gl.profitCenterId, gl.projectId, gl.projectGroupId,
    gl.fiscalId, gl.coaId
ORDER BY  
    gl.coaId
SELECT
    gl.companyId, gl.profitCenterId, gl.projectId, gl.projectGroupId,     
    gl.fiscalId, gl.coaId,
    SUM(gl.amount) OVER (PARTITION BY gl.companyId, gl.profitCenterId, gl.projectId, gl.projectGroupId, gl.fiscalId, gl.coaId) AS sumAmountForRow
FROM 
    fiscal
CROSS JOIN 
    coa, gl
WHERE 
    gl.coaId >= 40000 AND gl.coaId < 50000 AND gl.fiscalId = 311
GROUP BY  
    gl.companyId, gl.profitCenterId, gl.projectId,
    gl.projectGroupId, gl.fiscalId, gl.coaId
ORDER BY  
    gl.coaId
CREATE TABLE [dbo].[fiscal] 
(
    [Id]           INT          NOT NULL,
    [description]  NVARCHAR(50) NULL,
    [openOrClosed] NVARCHAR(1)  NULL,
    [dateFrom]     DATE         NULL,
    [dateTo]       DATE         NULL,
    CONSTRAINT [PK_fiscal] PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[coa] 
(
    [Id]              INT          NOT NULL,
    [description]     NVARCHAR(50) NULL,
    [accountType]     NVARCHAR(1)  NULL,
    [statementType]   INT          NULL,
    [jobCostCategory] NVARCHAR(1)  NULL,
    [accountCategory] INT          NULL,
    CONSTRAINT [PK_coa] PRIMARY KEY CLUSTERED ([Id] ASC)
);