2015-02-26 2 views
1

Я хотел бы добавить сезонОписание и сезон в эту временную таблицу база по выбору даты по параметру startDate и endDate по сравнению с catchdate seaon определяет каждый год начало сезона с 1 октября и конец сезона 30 сентября следующего года пример, если дата уловов между октябрем 1,2013 по 30 сентября 2010 года будет сезон 2013 года, а seasondescripttion будет с 1 октября 2012 года по 30 сентября 0101 года i'am думает писать чтобы получить базу сезонов по выбору даты, но не знаете, с чего начать. вот мой темп столКак рассчитать базу сезона на дату начала и окончания

enter code here 
If(OBJECT_ID('tempdb..#tempcatch') Is Not Null)/****** Script for SelectTopNRows command from SSMS ******/ 
    drop table #tempcatch; 
create table #tempcatch 
(
     [id] int , 
     [customerId] int,  
     [catchDate] datetime, 
     [submissionDate] datetime, 
     [speciesId] int,    
     [catchStatusId] int, 
     [approvedDate] datetime 

) 
INSERT INTO #tempcatch VALUES (1, 123,'01-01-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (2, 124,'05-30-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (3, 125, '06-01-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (4, 126, '07-12-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (5, 123, '08-01-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (6, 124, '10-01-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (7, 125, '10-28-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (8, 126, '09-10-2013','',1,1,''); 
INSERT INTO #tempcatch VALUES (9, 127, '01-01-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (10, 128, '02-15-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (11, 129, '03-10-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (12, 130, '03-11-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (13, 131,'04-20-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (14, 132,'06-29-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (15, 133, '08-25-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (16, 134, '07-12-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (17, 135, '08-01-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (18, 136, '10-01-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (19, 137, '12-28-2014','',1,1,''); 
INSERT INTO #tempcatch VALUES (20, 138, '01-10-2015','',1,1,''); 
INSERT INTO #tempcatch VALUES (21, 139, '01-12-2015','',1,1,''); 
INSERT INTO #tempcatch VALUES (22, 140, '02-09-2015','',1,1,''); 
INSERT INTO #tempcatch VALUES (23, 141, '02-20-2015','',1,1,''); 
INSERT INTO #tempcatch VALUES (24, 142, '02-26-2015','',1,1,''); 


select id,customerId,catchDate,submissionDate,speciesId,catchStatusId,approvedDate,'seasonDescription'='','Season'='' 

from #tempcatch 

enter image description here

ответ

1

простое выражение случай должен это сделать.

SELECT id 
     , customerId 
     , catchDate 
     , submissionDate 
     , speciesId 
     , catchStatusId 
     , approvedDate 
     , '' as 'seasonDescription' 
     , case when MONTH(catchDate) >= 10 then YEAR(catchDate) + 1 else YEAR(catchDate) end as Season 
FROM #tempcatch 
+0

Wow !!! отлично, как я об этом не думаю. спасибо Seasn Lange. Я ценю помощь. –

1

Попробуйте этот запрос:

SELECT *, 
     seasonDescription = CONVERT(VARCHAR(20), startDate, 107) + ' - ' + CONVERT(VARCHAR(20), DATEADD(DAY, -1, DATEADD(YEAR, 1, startDate)), 107), 
     season = YEAR(startDate) 
FROM (
    SELECT *, DATEADD(MONTH, (DATEDIFF(MONTH, {d '1900-10-01'}, catchDate)/12) * 12, {d '1900-10-01'}) AS startDate 
    FROM #tempcatch 
) y