Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在连接到from子句子查询的select子句中使用子查询_Sql_Sql Server_Subquery - Fatal编程技术网

Sql 如何在连接到from子句子查询的select子句中使用子查询

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

我正在尝试将子查询连接到from子句子查询。但是,这样做会导致以下错误:

SQL错误[208][S0002]:对象名称“事务”无效

我试图重写多个查询以将它们放入一个查询中,因为查询几乎相同,只有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
           ...               ...            ...

考虑使用条件聚合并完全避免派生表

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