【问题标题】:Query in SQL Server 2000SQL Server 2000 中的查询
【发布时间】:2017-10-20 07:32:30
【问题描述】:

我有 2 个结构相同的 SQL Server 数据库,第一个在 SQL Server 2008 中,另一个在 SQL Server 2000 中。

我在 SQL Server 2008 中这样写了一个查询:

SELECT
    sph.SiProforma, SuProforma, cps.Tp_FamilyOffice_Name,
    DsProforma, NaProformaFee, NqCount, 
    NaProformaFee * NqCount as jameradif,
    SUM(NaProformaFee * NqCount) OVER (PARTITION BY suProforma) AS ghabelepardakht 

它在 SQL Server 2008 中工作,但是当我在 SQL Server 2000 中运行它时,我得到了这个错误:

关键字“OVER”附近的语法不正确。

我该如何解决?或者替换代码?

【问题讨论】:

  • 你的from 子句在哪里?
  • @Elham sh,仅支持 SQL Server 2005 以上版本。检查以下链接sqlservercentral.com/articles/Over+Clause/132079/…
  • 选择 sph.SiProforma,SuProforma,cps.Tp_FamilyOffice_Name,DsProforma,NaProformaFee,NqCount,NaProformaFeeNqCount as jameradif,SUM(NaProformaFeeNqCount) OVER(PARTITION BY suProforma) AS ghabelepardakht ,ssv.Tp_Code_Desc , DsContract,proj.TpProject,Status.Tp_Code_Desc,spd.SiGoods,CtbGdsSpc2.TpGds,ctbgdsspc2.CuGds,Ds_Edit,ctbservice.TpService 来自 Sls.SlsProformaHeader sph 左外连接 dbo.Ctb_Persons_Specifications cps on = sph.SiP .Si_Person 左外连接 sls.SlsProformaDetail spd on sph.SiProforma=spd.SiProforma
  • @Mansoor ,我知道了,我想要一个备用代码
  • @elhamsh,提供您的示例数据和预期输出..?

标签: sql sql-server-2008 sql-server-2000


【解决方案1】:

SQL Server 2000 不支持OVER。编写一个执行SUM(..) GROUP BY suProforma 的子查询并将子查询连接到suProforma 上的主表

我会使用您的表格为您编写一个示例,但原因有两个:一个是,我从 iPhone 4 发布并重新格式化您的查询(这有点混乱 - 您会为自己做更多的事情)你的代码更整洁)是非常非常辛苦的工作,而且 2,suProforma 列保存在哪个表中并不明显

下面是一个更简单的示例,您可以将其应用于您的查询:

SELECT
    t1.*,
    sq1.summed
FROM
    table1 t1
INNER JOIN
    (SELECT sum(a*b) as summed FROM table1 GROUP BY suProforma) sq2 ON T1.suProforma = sq2.suProforma

要将此查询应用于您的情况,请将 table1 替换为具有 suProforma 的表,并使用您的实际列更正 SUM(a*b)。然后添加您的其他联接

如果您分组和求和的列在不同的表中,那么您必须编写一个查询将两者链接在一起并将其粘贴(用括号括起来)代替 table1

比如这两件事是一样的:

SELECT *
FROM table1

SELECT *
FROM (select * from table1) sq1

养成将查询的 FROM 部分中的任何实体视为“我可以从中选择结果的矩形数据块”的习惯

此查询适用于 SQL Server 2000 和 2008

【讨论】:

  • 'sph' 是具有 suproforma 的表,'spd' 是具有 sum 列的表。所以你的例子在我的情况下不起作用
  • 我已经稍微编辑了我的答案,但是这里有一个数据库的基本学习点:在 sql 中,表(它是“数据块”)和一个子查询(它是一个“数据块”)。如果您的列位于不同的表中,则将 table1 换成返回所需数据的子查询
猜你喜欢
  • 2011-11-20
  • 2011-10-13
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 2023-03-18
  • 2017-12-12
  • 2010-10-01
相关资源
最近更新 更多