【发布时间】:2019-10-23 14:23:17
【问题描述】:
我正在尝试将子查询加入到 from 子句子查询中。但是,这样做会导致以下错误:
SQL 错误 [208] [S0002]:无效的对象名称“事务”
我正在尝试重写多个查询以将它们放入 1 个查询中,因为查询几乎相同,只有 where 子句不同。
这是我的尝试之一:
SELECT
transactions.OpeningDateFormatted,
(SELECT SUM(transactions.amount)
FROM transactions
WHERE transactions.transactiontypeid = 5) AS AdjustmentSum,
(SELECT SUM(transactions.amount)
FROM transactions
WHERE transactions.transactiontypeid = 1) AS InterestSum
FROM
(SELECT
FORMAT(files.OpeningDate, 'yyyy-MM') as OpeningDateFormatted,
amount,
transactiontypeid
FROM
FilesTransactions
INNER JOIN
files ON files.id = filestransactions.exid
WHERE
FilesTransactions.TransactionDate BETWEEN '2015-10-15' AND '2019-10-15'
AND ExID IN (SELECT id FROM files
WHERE files.OpeningDate BETWEEN '2015-10-01' AND '2019-09-30'
AND files.CustomerID = 3258)) transactions
GROUP BY
transactions.OpeningDateFormatted
我也尝试过以下操作,但它每个月给我的金额相同:
select
FORMAT(files.OpeningDate, 'yyyy-MM') as OpeningDateFormatted,
(select sum(FilesTransactions.Amount) as CollectedSum from FilesTransactions f2 join FilesTransactions on FilesTransactions.id=f2.id where f2.transactiontypeid = 5 and FORMAT(f2.TransactionDate, 'yyyy-MM') like FORMAT(FilesTransactions.TransactionDate, 'yyyy-MM') )
FROM
FilesTransactions
inner join files on files.id = filestransactions.exid
where
FilesTransactions.TransactionDate between '2015-10-15' and '2019-10-15' and
ExID in
(
select id from files where files.OpeningDate between '2015-10-15' and '2019-10-15' and files.CustomerID = 3258
)
GROUP BY
FORMAT(FilesTransactions.TransactionDate, 'yyyy-MM'), FORMAT(files.OpeningDate, 'yyyy-MM')
我想要的是一个可以为我提供以下信息的查询
OpeningDateFormatted | AdjustmentSum | InterestSum
2015-11 0 45
2015-12 45.25 7
... ... ...
【问题讨论】:
-
样本数据、预期结果和逻辑解释都会有所帮助。
-
使用条件聚合而不是子查询...
sum(Case when transactionTypeID = 1 then amount else 0 end) as InterestSum -
您的第一个在 SSMS 窗口上验证 OK - 只有在您运行它时才会失败?
标签: sql sql-server subquery