在SQL中复制一行

时间:2016-06-02 21:01:17

标签: sql sql-server

我有一个表(t1),其中列为FLIGHT_DATE(FLTDATE),另一列为DAYSPRIOR_TO_DEPARTURE(DAYSPRIOR),从这两列我构建了第三列TRANSACTION_DATE来自减去FLIGHT_DATE-DAYSPRIOR,最后我有一列预订SUM(BOOKED)。

以下是它的外观:

DPTDT         DAYSPRIOR    TRANSACTION_DATE    SUM(BOOKED)
01-JUN-15     0            01-JUN-15           252
01-JUN-15     1            31-MAY-15           250
01-JUN-15    -1            02-JUN-15           252
02-JUN-15     0            02-JUN-15           179
02-JUN-15     1            01-JUN-15           180
02-JUN-15    -1            03-JUN-15           178

任何记录(航班)的最小DAYSPRIOR为-1,因此对于DPTDT 01-JUN-15,最新的TRANSACTION_DATE为02-JUN-15,说这没有DPTDT = 01-JUN-15的行,其中TRANSACTION_DATE = 03-JUN-15或大于此日期。

我想要,因为对于DPTDT = 02-JUN-15,有一个TRANSACTION_DATE = 03-JUN-15然后在TRANSACTION_DATE = 03-JUN-15时为DPTDT = 01-JUN-15显示一行,其中记录为对于此出发日期(DPTDT = 01-JUN-15),此行应与DAYSPRIOR = -1时的值相同。

这有可能吗?感谢您对此的建议!

1 个答案:

答案 0 :(得分:0)

@Sergio,你的问题非常(非常)难以理解,
因为你的英语非常...... 意大利语:)

经过几个小时的大脑挑战,我想我已经解决了你的想法(不确定)。

如果我已理解,您希望在DEPARTURE_DATE和TRANSACTION_DATE之前提取预订总和。

您的问题是将TRANSACTION_DATE“翻译”为DAYS_PRIOR,它可能会给您少于-1的数字

TRANSACTION_DATE - DEPARTURE_DATE = DAYS_PRIOR

所以

'2015-06-03' - '2015-06-01' = -2

但你永远不会在你的t1中找到任何记录:

DEPARTURE_DATE = '2015-06-01'
DAYS_PRIOR = -2

您需要的是MAP全部

(REQUESTED_TRANSACTION_DATE - REQUESTED_DEPARTURE_DATE) < 0 

REQUESTED_DAYS_PRIOR = -1

试试这个:

declare @transaction_date date = '2015-06-3'
declare @departure_date date = '2015-06-1'
declare @days_prior int = datediff(day, @transaction_date, @departure_date)    

SELECT DPTDT, DAYSPRIOR, DPTDT-DAYSPRIOR AS TRANSACTION_DATE, SUM(BOOKED) SUM_BOOKED
FROM t1 
WHERE DPTDT= @departure_date 
AND DAYSPRIOR = iif(@days_prior<0, -1, @days_prior)    
GROUP BY DPTDT,DAYSPRIOR    

这应该给你想要的结果

我希望这会有所帮助