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個別に処理された後、2 番目のクエリでエイリアスを参照することはできませんが、代わりに次のようにすることができます。

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 に答える