Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 尝试对子查询的前1项求和_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 尝试对子查询的前1项求和

Sql server 尝试对子查询的前1项求和,sql-server,sql-server-2008,Sql Server,Sql Server 2008,下面是我的SELECT语句的一小部分: SELECT CASE WHEN I.IsSimCheckout=1 THEN SUM(DISTINCT SalePrice) ELSE SUM(SalePrice) END FROM InvoiceDetail TD WHERE TD.InvoiceID = D.InvoiceID 我想做的是: SELECT CASE WHEN I.IsSimCheckout=1 THEN SUM(TOP 1 SalePrice ORDER BY

下面是我的SELECT语句的一小部分:

SELECT CASE WHEN I.IsSimCheckout=1 THEN 
    SUM(DISTINCT SalePrice) ELSE SUM(SalePrice) END 
FROM InvoiceDetail TD WHERE TD.InvoiceID = D.InvoiceID
我想做的是:

SELECT CASE WHEN I.IsSimCheckout=1 THEN 
    SUM(TOP 1 SalePrice ORDER BY SalePrice) + SUM(TOP 1 SalePrice ORDER BY SalePrice DESC) ELSE SUM(SalePrice) END 
FROM InvoiceDetail TD WHERE TD.InvoiceID = D.InvoiceID
显然,我知道后一种SQL不会编译。但基本上,我想做的是,如果I.IsSimCheckout等于1,那么我想把最高售价和最低售价相加,而不是把它们相加。希望我所做的是有意义的,并且是清楚的

我正在使用SQLServer2008

SELECT
.... 
FROM InvoiceDetail TD
OUTER APPLY
(
    SELECT TOP 1 SalePrice
    FROM D(?)
    WHERE TD.InvoiceID = D.InvoiceID
    ORDER BY SalePrice ASC 
) LP
OUTER APPLY
(
    SELECT TOP 1 SalePrice
    FROM D(?)
    WHERE TD.InvoiceID = D.InvoiceID
   ORDER BY SalePrice DESC
) HP
 WHERE TD.InvoiceID = D.InvoiceID

这是总的想法。我将为您保留SELECT语句。

您可以使用groupby按如下方式执行此操作

  select 
  case when I.IsSimCheckout=1 then max(id.SalePrice)+min(id.SalePrice)
  else sum(id.SalePrice) as result
  from Invoice I join InvoiceDetail ID on I.InvoiceID=Id.InvoiceID
  group by i.InvoiceID, id.InvoiceID, I.IsSimCheckout

请回顾您的问题并给出明确的方式