Sql 查詢 置頂、排序,置頂和非置頂為不同的排序欄位

龐順龍發表於2019-05-11

--需求:先顯示置頂資訊,按照置頂過期時間降序顯示,然後顯示未置頂和置頂過期的資訊,按照最後修改時間排序 
--思路:將過期的記錄的是否置頂 1 改為0 ,置頂過期時間改為 null ,最後按照,是否排序,置頂的排序欄位,非置頂的排序欄位, orderby即可
SELECT  SysBulletinId ,
        BulletinTitle ,
        LastUpdateTime ,
        CASE WHEN TopExpirationTime >= GETDATE() THEN CONVERT(BIT, 1)
             WHEN TopExpirationTime < GETDATE() THEN CONVERT (BIT, 0)
             ELSE CONVERT (BIT, 0)
        END IsTop ,
        CASE WHEN TopExpirationTime >= GETDATE() THEN TopExpirationTime
             ELSE NULL
        END TopExpirationTime
FROM    SysBulletin
WHERE   1 = 1
        AND IsRelease = '1'
ORDER BY IsTop DESC ,
        TopExpirationTime DESC ,
        LastUpdateTime DESC
-- 統一按照LastUpdateTime 排序
SELECT TOP 222
        SysBulletinId ,
        BulletinTitle ,
        CASE WHEN LEN(ISNULL(BulletinSubhead, '')) > 100
             THEN LEFT(ISNULL(BulletinSubhead, ''), 100) + '......'
             WHEN LEN(ISNULL(BulletinSubhead, '')) <= 100 THEN BulletinSubhead
        END BulletinSubhead ,
        LastUpdateTime ,
        CASE WHEN TopExpirationTime >= GETDATE() THEN CONVERT(BIT, 1)
             WHEN TopExpirationTime < GETDATE() THEN CONVERT (BIT, 0)
             ELSE CONVERT (BIT, 0)
        END IsTop
FROM    SysBulletin
WHERE   1 = 1
        AND IsRelease = '1'
        AND 1 = 1
ORDER BY IsTop DESC ,
        TopExpirationTime DESC ,
        LastUpdateTime DESC

龐順龍最後編輯於:4年前

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章