Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 仅对子查询进行筛选_Sql_Sql Server - Fatal编程技术网

Sql 仅对子查询进行筛选

Sql 仅对子查询进行筛选,sql,sql-server,Sql,Sql Server,我有一个返回四列的查询,我只想对其中的两列应用一个日期范围/过滤器,之前我编写的查询如下 SELECT TOP (100) PERCENT dbo.Collector.name, dbo.Debtor.batchno AS batchno, COUNT(dbo.Debtor.id) AS cases, SUM(dbo.Debtor.totalDebt) AS amount, SUM(dbo.Payment.payment) AS c

我有一个返回四列的查询,我只想对其中的两列应用一个日期范围/过滤器,之前我编写的查询如下

SELECT TOP (100) PERCENT dbo.Collector.name, 
       dbo.Debtor.batchno AS batchno, 
       COUNT(dbo.Debtor.id) AS cases, 
       SUM(dbo.Debtor.totalDebt) AS amount, 
       SUM(dbo.Payment.payment) AS collection,
       SUM(dbo.Debtor.balance) AS OSBalance, 
       dbo.debtor.receivedDate    
  FROM dbo.Payment WITH (NOLOCK) 
       INNER JOIN dbo.Collector WITH (NOLOCK) 
             ON dbo.Payment.collectorid = dbo.Collector.id 
       INNER JOIN dbo.Debtor WITH (NOLOCK) 
             ON dbo.Payment.debtorid = dbo.Debtor.id 
       INNER JOIN dbo.Client WITH (NOLOCK) 
             ON dbo.debtor.clientid = dbo.Client.id   
 WHERE dbo.Payment.paymentdate BETWEEN ' 2011-02-27 00:00:00.000 ' 
                                   AND  '2014-02-27 23:59:59.000'     
       AND dbo.Payment.confirmed='Y' 
GROUP BY  
       dbo.Collector.name, 
       dbo.Debtor.batchno,
       dbo.debtor.receivedDate 
ORDER BY 
       dbo.debtor.receivedDate DESC
以上内容按paymentdate过滤所有列。但是,我希望按付款日期筛选只适用于两列,即案例和收款,如下所示

SELECT TOP (100) PERCENT dbo.Collector.name, 
       dbo.Debtor.batchno AS batchno,
       (
   SELECT COUNT(dbo.Debtor.id) 
   FROM dbo.Debtor d INNER JOIN dbo.Payment p ON d.id = p.debtorid
   WHERE paymentdate BETWEEN ' 2011-02-27 00:00:00.000 ' 
                          AND  '2014-02-27 23:59:59.000' 
          AND batchno=dbo.Debtor.batchno 
           AND dbo.collector.name= dbo.collector.name
   ) AS cases, 
       SUM(dbo.Debtor.totalDebt) AS amount, 
       (
        SELECT SUM(dbo.Payment.payment) 
         FROM dbo.Payment 
        WHERE paymentdate BETWEEN ' 2011-02-27 00:00:00.000 ' 
                              AND  '2014-02-27 23:59:59.000' 
              AND batchno= dbo.Debtor.batchno 
              AND name= dbo.collector.name
         ) AS collection,
       SUM(dbo.Debtor.balance) AS OSBalance, 
       dbo.debtor.receivedDate    
  FROM dbo.Payment WITH (NOLOCK) 
       INNER JOIN dbo.Collector WITH (NOLOCK) 
             ON dbo.Payment.collectorid = dbo.Collector.id 
       INNER JOIN dbo.Debtor WITH (NOLOCK) 
             ON dbo.Payment.debtorid = dbo.Debtor.id 
       INNER JOIN dbo.Client WITH (NOLOCK) 
             ON dbo.debtor.clientid = dbo.Client.id   
 WHERE dbo.Payment.confirmed='Y' 
GROUP BY 
       dbo.Collector.name, 
       dbo.Debtor.batchno,
       dbo.debtor.receivedDate 
ORDER BY 
       dbo.debtor.receivedDate DESC

以上这些对我不起作用。另外,我只想按batchno和name进行分组。此外,托收和案例列必须按付款日期过滤。请问我如何做到这一点?任何帮助都将不胜感激。最热烈的问候

谢谢各位先生的纠正。它不是mysql,而是MSSQL 2008。谢谢你不为你工作怎么办?你们的桌子结构在哪里?很快,伙计们。现在可以了。以前,重复相同的值。现在将更新我的查询。