0
SELECT *, 
  ROW_NUMBER() OVER (ORDER BY checktime)RN 
INTO   XYZZ
FROM   test 
where  checktime>='2013-08-14 00:00:00.000' 
  and  checktime<='2013-08-14     23:00:00.000'     

...........1

SELECT t1.*, 
  ( t2.checktime - t1.checktime) as w
FROM   XYZZ t1 
LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
union all
select null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
From XYZZ

...2

  1. 工作正常,但 2 不工作

我在 sql 中执行这个查询,我得到这个错误:

消息 207,级别 16,状态 1,第 10 行无效的列名称“w”。消息 207,级别 16,状态 1,第 11 行无效的列名称“W”。

4

1 回答 1

0

你不能那样做,你不能在第二个查询中引用别名,在UNION ALL它们被单独处理之后,但你可以这样做:

SELECT t1.*, (t2.checktime - t1.checktime) as w
FROM   XYZZ t1 
LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
UNION ALL
SELECT null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
From
(
    SELECT t1.*, (t2.checktime - t1.checktime) as w
    FROM   XYZZ t1 
    LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
) AS t;

或者

WITH CTE
AS
(
    SELECT t1.*, (t2.checktime - t1.checktime) as w
    FROM   XYZZ t1 
    LEFT JOIN XYZZ t2 ON t1.RN = t2.RN - 1
)
SELECT *
FROM CTE
UNION ALL
SELECT null,null,null,null,null,null,null,null,null,
  Convert(varchar(10),sum(DatePart(hh,w)))+':'+
  Convert(varchar(10),sum(DatePart(mi,W)))
FROM CTE;
于 2013-09-05T09:07:14.090 回答