【发布时间】:2020-10-05 07:51:04
【问题描述】:
您好,我做了这个选择查询。这很好用,但是它只显示发生突变的记录。我想查看 dbo.grtbk 的所有 reknr(有或没有突变)。期间的结果必须与数字相匹配。这意味着如果它有效,我需要有 1085 行而不是所有行都有结果。我该怎么做?
SELECT TOP (100) PERCENT dbo.grtbk.reknr, dbo.grtbk.oms25_0, SUM(CASE WHEN MONTH(ReportingDate) = '1' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [1], SUM(CASE WHEN MONTH(ReportingDate)
= '2' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [2], SUM(CASE WHEN MONTH(ReportingDate) = '3' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [3],
SUM(CASE WHEN MONTH(ReportingDate) = '4' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [4], SUM(CASE WHEN MONTH(ReportingDate) = '5' THEN (AmountDCDebit - AmountDCCredit)
ELSE 0 END) AS [5], SUM(CASE WHEN MONTH(ReportingDate) = '6' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [6], SUM(CASE WHEN MONTH(ReportingDate)
= '7' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [7], SUM(CASE WHEN MONTH(ReportingDate) = '8' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [8],
SUM(CASE WHEN MONTH(ReportingDate) = '9' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [9], SUM(CASE WHEN MONTH(ReportingDate) = '10' THEN (AmountDCDebit - AmountDCCredit)
ELSE 0 END) AS [10], SUM(CASE WHEN MONTH(ReportingDate) = '11' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [11], SUM(CASE WHEN MONTH(ReportingDate)
= '12' THEN (AmountDCDebit - AmountDCCredit) ELSE 0 END) AS [12]
FROM dbo.GeneralLedgerBalances INNER JOIN
dbo.grtbk ON dbo.GeneralLedgerBalances.GeneralLedger = dbo.grtbk.reknr
WHERE (YEAR(dbo.GeneralLedgerBalances.ReportingDate) = 2020)
GROUP BY YEAR(dbo.GeneralLedgerBalances.ReportingDate), dbo.grtbk.oms25_0, dbo.grtbk.reknr
【问题讨论】:
-
您使用的是 MySQL 还是 MS Access?
-
你可能想要
LEFT JOIN,而不是INNER JOIN -
大家好,我刚刚添加了一个答案,您可以检查它是否正常吗?
-
好好学习 - TOP (100) PERCENT 没有任何用处,您应该忘记您曾经了解过它。如果行的顺序对您的结果集很重要,那么生成它的查询必须有一个 ORDER BY 子句。
标签: sql sql-server select