Sql 如何在连接到from子句子查询的select子句中使用子查询
我正在尝试将子查询连接到from子句子查询。但是,这样做会导致以下错误: SQL错误[208][S0002]:对象名称“事务”无效 我试图重写多个查询以将它们放入一个查询中,因为查询几乎相同,只有where子句不同 以下是我的一个尝试:Sql 如何在连接到from子句子查询的select子句中使用子查询,sql,sql-server,subquery,Sql,Sql Server,Subquery,我正在尝试将子查询连接到from子句子查询。但是,这样做会导致以下错误: SQL错误[208][S0002]:对象名称“事务”无效 我试图重写多个查询以将它们放入一个查询中,因为查询几乎相同,只有where子句不同 以下是我的一个尝试: SELECT transactions.OpeningDateFormatted, (SELECT SUM(transactions.amount) FROM transactions WHERE transactions
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
... ... ...
考虑使用条件聚合并完全避免派生表
SELECT FORMAT(files.OpeningDate, 'yyyy-MM') as OpeningDateFormatted
, SUM(CASE when transactiontypeid = 5 then amount else 0 end) AS AdjustmentSum
, SUM(CASE when transactionTypeID = 1 then amount else 0 end) AS InterestSum
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 FORMAT(files.OpeningDate, 'yyyy-MM')
I might be more inclined to use an exists instead of an IN for exID...
或者如果你真的坚持使用事务表。。。使用公共表表达式(CTE)
示例数据、所需结果和逻辑解释都会有所帮助。请使用条件聚合而不是子查询
sum(transactionTypeID=1的情况下,金额为0结束)作为利息sum
您的第一个在SSMS窗口上验证OK-是否只是在运行时失败?非常好,这正是我需要的。感谢您的帮助,我没有想到使用条件聚合。
WITH Transactions as (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)
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 transactions
GROUP BY transactions.OpeningDateFormatted