0
我在使用SQL中的'group by'和'select-case-when'時遇到問題。sql group by season
我有這張表:Promotion(Name,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
任何想法?
非常感謝您的時間!
哪個RDBMS是這個呢?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。 –
適用於Microsoft Windows的Oracle數據庫11g第2版(x64) –