У меня проблема с использованием «group by» и «select-case-when» в SQL.sql group по сезону
У меня есть эта таблица: Продвижение (Название, CodProd, CodProdSimilar, StartDate, EndDate, Discount), и что мне нужно сделать: знать, в какие сезоны действует акция.
Например:
<table style="width:100%">
<tr>
<td>Name</td>
<td>StartDate(dd/mm/yyyy)</td>
<td>EndDate(dd/mm/yyyy)</td>
<td>Season (southern hemisphere)</td>
</tr>
<tr>
<td>Prom1 </td>
<td>02/01/2015 </td>
<td>09/01/2015</td>
<td>Summer</td>
</tr>
<tr>
<td>Prom2 </td>
<td>02/01/2015 </td>
<td>09/04/2015</td>
<td>Summer</td>
</tr>
<tr>
<td>Prom2 </td>
<td>02/01/2015 </td>
<td>09/04/2015</td>
<td>Autumn</td>
</tr>
</table>
это легко решить, когда акция только один сезон, но я не могу это сделать еще в случае Prom2.
Мой код:
select
Name, StartDate, EndDate,
CASE
WHEN EXTRACT(MONTH from StartDate) < 3 THEN 'Summer'
WHEN EXTRACT(MONTH from StartDate) = 3 THEN
CASE
WHEN EXTRACT(DAY from StartDate) <= 20 THEN 'Summer'
ELSE 'Autumn'
END
WHEN EXTRACT(MONTH from StartDate) < 6 THEN 'Autumn'
WHEN EXTRACT(MONTH from StartDate) = 6 THEN
CASE
WHEN EXTRACT(DAY from StartDate) <= 20 THEN 'Autumn'
ELSE 'Winter'
END
WHEN EXTRACT(MONTH from StartDate) < 9 THEN 'Winter'
WHEN EXTRACT(MONTH from StartDate) = 9 THEN
CASE
WHEN EXTRACT(DAY from StartDate) <= 20 THEN 'Winter'
ELSE 'Spring'
END
WHEN EXTRACT(MONTH from StartDate)< 12 THEN 'Spring'
WHEN EXTRACT(MONTH from StartDate) = 12 THEN
CASE
WHEN EXTRACT(DAY from StartDate) <= 20 THEN 'Spring'
ELSE 'Summer'
END
END as season
from
promotion
Любая идея?
Большое спасибо за ваше время!
Какой РСУБД это? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –
Oracle Database 11g Release 2 для Microsoft Windows (x64) –