Sql 从主表中没有值的联接表中获取值
下面显示的查询几乎正确,但我需要为每个会计Id设置一行,即在下面显示的输出中,第4行之后需要有一个新行,数据屏幕截图如下 我使用的查询是:Sql 从主表中没有值的联接表中获取值,sql,sql-server,Sql,Sql Server,下面显示的查询几乎正确,但我需要为每个会计Id设置一行,即在下面显示的输出中,第4行之后需要有一个新行,数据屏幕截图如下 我使用的查询是: SELECT a.companyId,a.profitCenterID,a.coaID,a.fiscalId, COALESCE(SUM(a.amount * -1),0) amount, twelveMo = ( SELECT COALESCE(SUM(amount * -1), 0) FRO
SELECT a.companyId,a.profitCenterID,a.coaID,a.fiscalId,
COALESCE(SUM(a.amount * -1),0) amount,
twelveMo = (
SELECT COALESCE(SUM(amount * -1), 0)
FROM gl a1
LEFT OUTER JOIN fiscal f ON a1.fiscalId=f.Id
WHERE
a1.companyId = a.companyId AND
a1.profitCenterId = a.profitCenterId AND
a1.coaId = a.coaId AND
f.Id > a.fiscalId - 12 AND
f.Id <= a.fiscalId
)
FROM gl a
INNER JOIN coa c ON c.Id=a.coaId AND c.statementType=4
GROUP BY companyId,profitCenterId,coaId,a.fiscalId
ORDER BY companyId,profitCenterId,coaId,a.fiscalId
我不知道您的示例数据和模式,所以我只是在您的基础上添加了我的查询
;WITH CTE_NUM_TEMP AS
(
SELECT 1 AS Fiscal
UNION ALL
SELECT Fiscal+1 FROM CTE_NUM_TEMP
WHERE Fiscal+1<=100
)
SELECT ISNULL(Der.companyId,1) AS companyId,ISNULL(Der.profitCenterID,1) AS profitCenterID,
ISNULL(Der.coaID,40000) AS coaID,IIF(twelveMo IS NULL,LAG(twelveMo,1) OVER(ORDER BY Fiscal),twelveMo) AS twelveMo
FROM CTE_NUM_TEMP AS Num
LEFT JOIN
(
SELECT a.companyId,a.profitCenterID,a.coaID,a.fiscalId,
COALESCE(SUM(a.amount * -1),0) amount,
twelveMo = (
SELECT COALESCE(SUM(amount * -1), 0)
FROM gl a1
LEFT OUTER JOIN fiscal f ON a1.fiscalId=f.Id
WHERE
a1.companyId = a.companyId AND
a1.profitCenterId = a.profitCenterId AND
a1.coaId = a.coaId AND
f.Id > a.fiscalId - 12 AND
f.Id <= a.fiscalId
)
FROM gl a
INNER JOIN coa c ON c.Id=a.coaId AND c.statementType=4
GROUP BY companyId,profitCenterId,coaId,a.fiscalId
)AS Der
ON Num.Fiscal=Der.fiscalId
提示:不要在外部SELECT的投影子句中使用SELECT子查询—这是SQL代码的味道。考虑将你的查询重构为FROM子集。你需要一个日历/计数表,它有你需要的所有行,然后加入。可能的示例数据的复制会很有帮助。