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)
);