候选人 选项 选票合计
程  敏 同意 6
冯希平 反对 3
冯希平 弃权 2
冯希平 同意 1
韩晓兰 同意 6
韩永成 同意 6
胡德渝 弃权 2
胡德渝 同意 4
黄瑞哲 同意 6
黄少宏 同意 6
李  刚 同意 6这样的表,希望的结果是得到先按照同意最高的排序,得票相同的按照弃权再排序,两者都相同的按照反对的再排序。这该如何写sql语句?  是行列转换吗?谢谢!

解决方案 »

  1.   

    CREATE TABLE #temp (候选人  nvarchar(10), 选项 nvarchar(10), 选票合计 int)
    INSERT INTO #temp
    select '程敏','同意','6' union all
    select '冯希平','反对','3' union all
    select '冯希平','弃权','2' union all
    select '冯希平','同意','1' union all
    select '韩晓兰','同意','6' union all
    select '韩永成','同意','6' union all
    select '胡德渝','弃权','2' union all
    select '胡德渝','同意','4' union all
    select '黄瑞哲','同意','6' union all
    select '黄少宏','同意','6' union all
    select '李刚','同意','6'SELECT 候选人,同意=ISNULL(同意,0),弃权=ISNULL(弃权,0),反对=ISNULL(反对,0)
    FROM #temp a
    PIVOT
    (MAX(选票合计) FOR 选项 IN([同意], [弃权], [反对])) b 
    ORDER BY 同意 DESC, 弃权, 反对   --同意最多,弃权最少,反对最少/*
    候选人 同意 弃权 反对
    程敏 6 0 0
    韩晓兰 6 0 0
    韩永成 6 0 0
    黄瑞哲 6 0 0
    黄少宏 6 0 0
    李刚 6 0 0
    胡德渝 4 2 0
    冯希平 1 2 3
    */
      

  2.   

    ----------------------------------------------------------------
    -- Author  :DBA_Huangzj(發糞塗牆)
    -- Date    :2013-08-12 15:59:32
    -- Version:
    --      Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
    -- Jun 10 2013 20:09:10 
    -- Copyright (c) Microsoft Corporation
    -- Enterprise Evaluation Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
    --
    ----------------------------------------------------------------
    --> 测试数据:[huang]
    if object_id('[huang]') is not null drop table [huang]
    go 
    create table [huang]([候选人] varchar(6),[选项] varchar(4),[选票合计] int)
    insert [huang]
    select '程敏','同意',6 union all
    select '冯希平','反对',3 union all
    select '冯希平','弃权',2 union all
    select '冯希平','同意',1 union all
    select '韩晓兰','同意',6 union all
    select '韩永成','同意',6 union all
    select '胡德渝','弃权',2 union all
    select '胡德渝','同意',4 union all
    select '黄瑞哲','同意',6 union all
    select '黄少宏','同意',6 union all
    select '李刚','同意',6
    --------------开始查询--------------------------select * 
    from [huang]
    ORDER BY CASE WHEN  [选项]='同意' THEN 3 WHEN [选项]='弃权' THEN 2 WHEN [选项]='反对' THEN 1 END  desc,[选票合计] DESC
    ----------------结果----------------------------
    /* 
    候选人    选项   选票合计
    ------ ---- -----------
    程敏     同意   6
    韩晓兰    同意   6
    韩永成    同意   6
    黄瑞哲    同意   6
    黄少宏    同意   6
    李刚     同意   6
    胡德渝    同意   4
    冯希平    同意   1
    冯希平    弃权   2
    胡德渝    弃权   2
    冯希平    反对   3
    */