当前位置: 代码迷 >> Sql Server >> *求一条SQL*解决办法
  详细解决方案

*求一条SQL*解决办法

热度:56   发布时间:2016-04-24 10:04:51.0
******************求一条SQL****************

如图。按城市分组。
当日期>今天,为“未上线”;
当日期<=今天,取其中ThemeId最大的,作为“已上线”;
其余为“已下线”(即日起<=今天,并且ThemdId不是最大的剩余所有数据)

备注:ThemeId为主键。日期实际只存年月日(时分秒部分都为0),所以日期对比可能只取日期部分进行对比,我自己会处理。

关于测试数据,很抱歉,没有权限,不太好提供。感谢。
图中的SQL如下:




SELECT 
ThemeId,
CASE 
        WHEN CityId=2 THEN '上海'
        WHEN CityId=1 THEN '北京'
        WHEN CityId=32 THEN '广州'
        WHEN CityId=30 THEN '深圳'
        WHEN CityId=37 THEN '丽江'
        ELSE ''
    END CityName,
    BeginDate,
    CASE 
WHEN BeginDate>GETDATE() THEN '未上线'
WHEN MAX(BeginDate) <=GETDATE() THEN '已上线'
ELSE '已下线'
END GroupThemeStatus
FROM
GHP_GroupTheme(NOLOCK)
GROUP BY
CityId,ThemeId,BeginDate



------解决方案--------------------
...终于明白需求了...  (GetDate()处需要截断到日,你说会自己处理,我就不处理了)

SELECT 
    ThemeId,
    CASE 
        WHEN CityId=2 THEN '上海'
        WHEN CityId=1 THEN '北京'
        WHEN CityId=32 THEN '广州'
        WHEN CityId=30 THEN '深圳'
        WHEN CityId=37 THEN '丽江'
        ELSE ''
    END CityName,
    BeginDate,
    CASE 
        WHEN BeginDate>GETDATE() THEN '未上线'
        WHEN BeginDate=(select MAX(BeginDate) from GHP_GroupTheme g2 where BeginDate<=GETDATE() and g1.CityId=g2.CityId ) THEN '已上线'
        ELSE '已下线'
    END GroupThemeStatus
FROM
    GHP_GroupTheme g1 (NOLOCK)



------解决方案--------------------


 
SELECT 
    ThemeId,
    CASE 
        WHEN CityId=2 THEN '上海'
        WHEN CityId=1 THEN '北京'
        WHEN CityId=32 THEN '广州'
        WHEN CityId=30 THEN '深圳'
        WHEN CityId=37 THEN '丽江'
        ELSE ''
    END CityName,
    BeginDate,
    CASE 
        WHEN BeginDate>GETDATE() THEN '未上线'
        when themeld=(select MAX(themeld) from  GHP_GroupTheme as g2  where g1.cityid=g2.cityid 
        and g2.begindate<=GETDATE())
        ELSE '已下线'
    END GroupThemeStatus
FROM
    GHP_GroupTheme(NOLOCK) as g1

     试试
------解决方案--------------------





SELECT 
ThemeId,
CASE 
        WHEN CityId=2 THEN '上海'
        WHEN CityId=1 THEN '北京'
        WHEN CityId=32 THEN '广州'
        WHEN CityId=30 THEN '深圳'
        WHEN CityId=37 THEN '丽江'
        ELSE ''
    END CityName,
    BeginDate,
    CASE 
WHEN BeginDate>GETDATE() THEN '未上线'
WHEN not exists(select * from GHP_GroupTheme where cityid=t.cityid and themeID>t.themeID) and  BeginDate  <=GETDATE() THEN '已上线'
ELSE '已下线'
END GroupThemeStatus
FROM
GHP_GroupTheme(NOLOCK) t
 

------解决方案--------------------
建议不要用CASE WHEN 来判断 直接用IF ..ELSE来判断。
------解决方案--------------------
SELECT 
    ThemeId,
    CASE 
        WHEN CityId=2 THEN '上海'
        WHEN CityId=1 THEN '北京'
  相关解决方案