Można to zrobić bez użycia kursora i pętli, do zapytania potrzebujemy oznaczenia czy dany rekord ma w dacie od datę początkową, czy datę końcową, czy obie, później pozostajeproste zapytanie o te wartości.
Kopiuj
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[source](
[Artykul] [int] NULL,
[data_od] [date] NULL,
[data_do] [date] NULL,
[data_odInt] [float] NULL,
[data_doInt] [float] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[source] ([Artykul], [data_od], [data_do], [data_odInt], [data_doInt])
VALUES (1, '20090320', '20090405', 39890, 39906)
,(1, '20091026', '20091121', 40110, 40136)
,(1, '20091116', '20100411', 40131, 40277)
,(1, '20091223', '20100111', 40168, 40187)
,(1, '20100111', '20100414', 40187, 40280)
,(1, '20110317', '20110714', 40617, 40736)
,(1, '20110612', '20110814', 40704, 40767)
,(1, '20110815', '20110821', 40768, 40774)
,(2, '20110609', '20110714', 40701, 40736)
,(2, '20110612', '20110814', 40704, 40767)
,(2, '20110815', '20110821', 40768, 40774)
,(2, '20130126', '20130207', 41298, 41310)
,(2, '20130802', '20130803', 41486, 41487)
,(2, '20140225', '20140316', 41693, 41712)
,(2, '20140317', '20140330', 41713, 41726)
,(2, '20141201', '20141204', 41972, 41975)
,(2, '20141226', '20141229', 41997, 42000)
,(2, '20141228', '20141230', 41999, 42001)
,(2, '20150109', '20150113', 42011, 42015)
,(2, '20150531', '20150531', 42153, 42153)
,(2, '20151104', '20151106', 42310, 42312)
,(2, '20170101', '99990909', 42734, 2958350)
,(3, '20110609', '20110714', 40701, 40736)
,(3, '20110612', '20110814', 40704, 40767)
,(3, '20110815', '20110821', 40768, 40774)
,(3, '20160620', '20160809', 42539, 42589)
,(3, '20160620', '20160624', 42539, 42543)
,(3, '20161109', '99990909', 42681, 2958350)