5

我有一个 WinForms 客户端应用程序,它使用参数执行以下 SQL 语句。

SELECT a.CaseNo, (c.Claimant + ' -v- ' + c.Defendant) AS CaseName, 
       a.Allocation - ISNULL(LAG(a.Allocation) 
       OVER (PARTITION BY a.CaseNo, a.FeeEarner ORDER BY a.AllocID), 0) AS Billing, a.AllocID 
FROM tblAllocations AS a INNER JOIN tblCases AS c ON a.CaseNo = c.CaseNo
WHERE a.CaseNo > 0 AND FeeEarner = @FeeEarner 
AND a.Date >= @StartDate 
AND a.Date <= @EndDate ORDER BY a.Date;

当我在进行开发工作的笔记本电脑上运行此程序时,查询执行没有问题。返回的信息用于填充客户端应用程序中的数据网格。我正在使用 SQL Server 2012 Express。

但是,当在我的客户场所运行完全相同的客户端应用程序时,代码会返回错误。大多数错误消息是由我的应用程序生成的,它使我能够查明代码中出现问题的位置。但是,在我附加系统生成错误的消息末尾,我得到以下信息:

The parallel data warehouse (PDW) features are not enabled

我以前从未见过此消息,因此无法确定问题所在。我尝试用 Google 搜索此错误消息,但没有发现任何有用的信息。我的客户正在使用 SQL Server 2008 R2 Express。

PDW 是 SQL Express 2012 中的一项功能,但 2008 R2 版本中没有?

我的查询需要 PDW 是怎么回事?

是否使用了 PARTITION,因为这是导致问题的查询之前我之前没有使用过的关键字?

在不让客户更改他们的 SQL 版本的情况下,有什么方法可以解决这个问题,例如通过更改我的 SQL 查询或在 SQL 中启用某些东西?

非常感激任何的帮助。

4

2 回答 2

4

该命令LAG仅在 SQL Server 2012 中受支持。

虽然如果这是问题,我对错误感到惊讶。

- 编辑 -

要在不使用的情况下复制您的查询LAG

这基本上是从我提到的文章中删除的;

SELECT 
       a.CaseNo, 
       (c.Claimant + ' -v- ' + c.Defendant) AS CaseName, 
       a.Allocation - ISNULL((
           CASE 
              WHEN N%2=1 
              THEN MAX(CASE 
                   WHEN N%2=0 
                   THEN a.Allocation 
                   END) 
              OVER (Partition BY N/2) 
              ELSE MAX(CASE 
                   WHEN N%2=1 
                   THEN a.Allocation
                   END) 
              OVER (Partition BY (N+1)/2) 
           END
       ), 0) AS Billing, 
       a.AllocID 
FROM tblAllocations AS a
LEFT JOIN (SELECT 
    Row_Number() OVER(ORDER BY b.Id) N,
    b.Id
  FROM tblAllocations as b) AS RowNum 
ON RowNum.id=a.id 
INNER JOIN tblCases AS c 
ON a.CaseNo = c.CaseNo
WHERE a.CaseNo > 0 
AND FeeEarner = @FeeEarner 
AND a.Date >= @StartDate 
AND a.Date <= @EndDate 
ORDER BY a.Date;

这是在下面演示的:

SQL 小提琴

于 2013-02-07T13:48:51.713 回答
0

我有同样的问题,我解决了,在“Partition by”之后删除了“ORDER BY”

SELECT MAX(FechaActualizacion) OVER (Partition BY YEAR(FechaActualizacion), MONTH(FechaActualizacion), CampoEspecial, NumeroEspecial, TipoCampoEspecial) as FechaMax
于 2021-09-07T13:55:56.503 回答