2010.7.26
怎样实现这样的行列转置?
源数据:
writer,works
卫斯理,大厦
卫斯理,地图
卫斯理,古声
卫斯理,蓝血人
郑文光,飞向人马座
海茵莱茵, 傀儡主人
海茵莱茵, 你们这些回魂尸要实现结果为:
卫斯理,郑文光,海茵莱茵
大厦,飞向人马座,傀儡主人
地图,'',你们这些回魂尸
古声,
蓝血人,如果用这样的语句:
SELECT ( 
CASE writer
WHEN '卫斯理'
THEN works
ELSE 0 
END 
)wsl, ( CASE writer
WHEN '海茵莱茵'
THEN works
ELSE 0 
END 
)hyly
FROM temp_sf
WHERE writer != ''结果是:
卫斯理,郑文光,海茵莱茵
大厦,
地图,
古声,
蓝血人,
'     ',飞向人马座,''
'     ','        ',傀儡主人
'     ','        ',你们这些回魂尸
也就是,走完一个,再走一个-- 表的结构 `temp_sf`
--CREATE TABLE IF NOT EXISTS `temp_sf` (
  `writer` varchar(10) COLLATE utf8_bin NOT NULL,
  `works` varchar(20) COLLATE utf8_bin NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;--
-- 导出表中的数据 `temp_sf`
--INSERT INTO `temp_sf` (`writer`, `works`) VALUES
('卫斯理', '大厦'),
('卫斯理', '古声'),
('卫斯理', '地图'),
('卫斯理', '蓝血人'),
('郑文光', '飞向人马座'),
('布拉德伯里', '冰霜与烈火'),
('海茵莱茵', '傀儡主人'),
('海茵莱茵', '你们这些回魂尸 '),
('凡尔纳', '格兰特船长的儿女'),
('凡尔纳', '海底两万里'),
('凡尔纳', '八十天环游地球'),
('凡尔纳', '太阳系历险记');

解决方案 »

  1.   

    莫非LZ用的是MySQL的数据库?MSSQL Server不存在关键字"`"
      

  2.   

    晕!怎么又跑到MySQL来了?是不是移动了帖子?
      

  3.   

    还是建议用成功实现吧,用MYSQL中的SQL语句实现是可以不过效率会很差。
      

  4.   


    SELECT max((CASE writer WHEN N'卫斯理' THEN works ELSE '' END)) wsl,
     max((CASE writer WHEN N'海茵莱茵' THEN works ELSE ''  END )) hyly,
     max((CASE writer WHEN N'凡尔纳' THEN works ELSE ''  END )) FRN
    FROM (select row_number() over(partition by writer order by works) grp,* from temp_sf) x
    group by grp如此便可
      

  5.   

    原来是INFORMIX SQL的,我在上网的机子上没有INFORMIX的环境,刚好在用MYSQL编程序,所以不小心就用了MYSQL来录入试验数据。
    我还在想,为什么刚发的贴子没了,原来是我弄成MYSQL,被转移了。
      

  6.   

    好像over(partition 是ORACLE的?在MYSQL下用不了