Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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

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
TSQL-汇总SQL 2005_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

TSQL-汇总SQL 2005

TSQL-汇总SQL 2005,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有以下示例代码: create table Details( name varchar(20), age int, weight int, recordDate Datetime) --insert data …查询: SELECT a.name, a.age, a.recordDate, a.weight - (SELECT b.weight FROM Details

我有以下示例代码:

create table Details(
  name varchar(20),
  age int,
  weight int,
  recordDate Datetime)

--insert data
…查询:

SELECT a.name,
       a.age,
       a.recordDate,
       a.weight - (SELECT b.weight
                     FROM Details
                    WHERE b.recordDate = dateadd(dd, -1, a.recordDate) as subtable)                             
  FROM Details a
GROUP BY WITH ROLLUP (a.recordDate, a.name, a.age)
我想看看每个人的记录日期之间的体重差异,然后记录该人和该年龄组的总体重差异,然后记录总体重增加/减少。这不是我的实际表格,只是一个示例

问题: 它抱怨子查询——然后我不得不将它用作表变量:subtable

现在它在抱怨:

Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'as'.
Msg 319, Level 15, State 1, Line 18
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

我缺少什么?

不要用作关键字。您可以直接编写{select*from blah a}

OK,所以问题是,使用ROLLUP并不是您真正想要的答案。这是为了创建小计,而不是您所追求的运行总计,因此使用它将为您提供不同日期组合的总计,而不是您所追求的运行总计。在开始时,您只想得到一个总的查询,该查询给出了您的姓名、年龄、日期以及与昨天相比的体重减轻情况,如下所示:

SELECT a.name,a.age,a.recordDate,a.weight-(SELECT b.weight
                                           FROM Details
                                           WHERE b.recordDate=dateadd(dd,-1,a.recordDate))
FROM Details a
GROUP BY (a.recordDate,a.name,a.age)
WITH ROLLUP 
select
      a.name
     ,a.age
     ,a.recordDate
     ,(SELECT b.weight from Details b WHERE b.recordDate = dateadd(dd,-1,a.recordDate)) - a.weight as weightLossForToday
   from details a
请记住,只有每天只有一条记录时,此查询才会起作用。如果你一天有两条记录,或者条目之间的间隔不是一天,也就是说,它们包括时间,那么它就不起作用了。为了得到一个运行的总工作时间,您需要遵循以下问题的方法

这样就可以了。

打字错误:

a.weight - (SELECT b.weight
              FROM Details
             WHERE b.recordDate = dateadd(dd, -1, a.recordDate)
…b被用作表别名,但实际上并没有定义为表别名

下一个问题是,您的GROUPBY不包含.weight,并且没有与之关联的聚合函数。以下是我对您的问题的回复:

  SELECT a.name,
         a.age,
         a.recordDate,
         SUM(a.weight - t.weight) 'weight'
    FROM DETAILS a
    JOIN (SELECT b.recordDate,
                 b.weight
            FROM DETAILS b) t ON t.recordDate = DATEADD(dd, -1, a.recordDate)
GROUP BY (a.recordDate, a.name, a.age) WITH ROLLUP
像这样试试

SELECT
    a.name,
    a.age,
    a.recordDate,
    SUM(a.weight - b.weight) as WeightDiff
FROM Details a
JOIN Details b 
    ON (b.age        = a.age
    AND b.name       = a.name
    AND b.recordDate = dateadd(dd, -1, a.recordDate)
        )
GROUP BY a.age, a.name, a.recordDate WITH ROLLUP 

甚至;我根据错误消息实现的位给了我相同的信息error@Manjot:我们无法帮助处理无法看到的内容。错误:Msg 102,级别15,状态1,第5行“,”附近的语法不正确。Msg 319,15级,状态1,第6行关键字“with”附近语法不正确。如果此语句是公共表表达式或xmlnamespaces子句,则前一个语句必须以分号结尾。由于语法仍然错误,因此没有那么简单,即使通过在子查询上添加详细信息b进行修复,第四列也是无效的。实际上,它不在组中,@rexem answer更适合这个目的。我误解了这个问题。谢谢。我一直在寻找汇总表,因为我想看到连续几天之间的体重下降,以及个人在一段时间内的体重下降,一个年龄组在一段时间内的体重下降,然后是大幅度的体重下降。我不知道如何更改您对thatMsg 102,15级,状态1,第8行的查询“;”附近的语法不正确。Msg 319,15级,状态1,第9行关键字“with”附近语法不正确。如果此语句是公共表表达式或xmlnamespaces子句,则前一条语句必须以分号结尾。我无法调试我看不到的内容-从中我可以看出,您使用的是CTE,而问题与;有关;。你的问题对我来说绝对有道理。。。。。不知道为什么SQL仍然是complaining@RBarryYoung奥巴马的解决方案奏效了。我仍然不知道为什么SQl报告了您的解决方案的语法错误。再次感谢