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