0

このループ構造の問題を SQL で解決できません。と の 2 つの DATETIME パラメータが@Departureあり@Arrivalます。NumberofHaltHrs以下のように @Departure と @Arrival のループを取得する必要があることを追加しています。

私が持っているとしましょう

@Departure= 13/01/01 00:00:00(YY/MM/DD) and 
@Arrival=  13/01/10 02:00:00(YY/MM/DD)
NumofHaltHrs are like 2, 22, 26, 56 (this is a column of other table where I need to ass to result table)

望ましい出力:

      @Departure                     @Arrival
    13/01/01 00:00:00          13/01/01 02:00:00  //Adding NumOfHaltHrs (2Hrs )
    13/01/01 02:00:00          13/01/02 00:00:00  //NumOfHaltHrs (22 Hrs)
    13/01/02 00:00:00          13/01/03 02:00:00
    13/01/03 02:00:00          13/01/05 08:00:00
    13/01/05 08:00:00          ...
    ...

@Departure,@Arrival,NumOfHaltHrs を結果テーブルに挿入する必要があり、その構造は次のとおりです。

JourneyDetailsTable: (JourneyID,HaltID,Departure,Arrival,NumOfHaltHrs)
Halt : HaltID,NumOfHaltDays

ループしてみましたが、出発列に到着日を取得できませんでした。

4

4 に答える 4

1

これを試して:

DECLARE @Departure DATETIME

SET 
    @Departure = '01/13/01 00:00:00'

CREATE TABLE #NumofHaltHrs(HaltTime INT, ID INT IDENTITY(1,1))

INSERT INTO #NumofHaltHrs
    (HaltTime)
VALUES
    (2)
INSERT INTO #NumofHaltHrs
    (HaltTime)
VALUES
    (22)
INSERT INTO #NumofHaltHrs
    (HaltTime)
VALUES
    (26)
INSERT INTO #NumofHaltHrs
    (HaltTime)
VALUES
    (56)

DECLARE @UpdatedArrivalTime DATETIME, @NumberOfHaltRows INT, @NumberOfHaltRowsIndex INT
SET @UpdatedArrivalTime = @Departure
SET @NumberOfHaltRowsIndex = 1

SELECT
    @NumberOfHaltRows = COUNT(ID)
FROM #NumofHaltHrs

CREATE TABLE #Schedule(DEPARTURE DATETIME, ARRIVAL DATETIME)

WHILE @NumberOfHaltRowsIndex <= @NumberOfHaltRows
BEGIN
    DECLARE @HaltTime INT
    SELECT
        @HaltTime = HaltTime
    FROM #NumofHaltHrs
    WHERE ID = @NumberOfHaltRowsIndex

    INSERT INTO #Schedule
    VALUES
        (@UpdatedArrivalTime, DATEADD(hour, @HaltTime, @UpdatedArrivalTime))

    SET @UpdatedArrivalTime = DATEADD(hour, @HaltTime, @UpdatedArrivalTime)

    SET @NumberOfHaltRowsIndex = @NumberOfHaltRowsIndex + 1
END

SELECT * FROM #Schedule

どのシナリオで使用するかわからないので、データが巨大な場合はパフォーマンスを確認してください。

于 2013-07-23T06:37:33.353 に答える
0
SELECT @Departure, @Arrival, DATEDIFF(hh, @Departure, @Arrival) AS NumofHaltHrs 
  FROM TABLE
 WHERE YOR_WHERE_CONDITION

この形式で結果を取得するかどうかはわかりません。これが役立つかどうかを確認してください。

于 2013-07-23T06:58:15.750 に答える
0

ここにSQLFiddelのデモがあります

以下はクエリです:

create table Halts (id int,NoOfHalts int)    
Go
insert into halts values(1,2),(2,22),(3,2),(4,22)
Go
select DATEADD(hour,
               T.sum - T.NoofHalts,
               Convert(datetime,'23/07/2012 00:00:00',103)) as Deaprture,
       DATEADD(hour,
               T.sum,
               Convert(datetime,'23/07/2012 00:00:00',103)) as Arrival ,NoofHalts
  from (select top (select COUNT(*) from Halts) 
               t1.id, 
               t1.NoOfHalts, 
               SUM(t2.NoOfHalts) as sum
          from Halts t1
         inner join Halts t2 on t1.id >= t2.id
         group by t1.id, t1.NoOfHalts
         order by t1.id
       ) T

出力に必要な数の Halts エントリをHaltsテーブルに追加します。

于 2013-07-23T07:48:05.763 に答える