论坛首页 招聘求职论坛

前天笔试碰到的一个题,是列转行的,大家帮看看

浏览 13483 次
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-03-30   最后修改:2011-03-30
前天笔试碰到的一个题,是列转行的,我把SQL贴出来,大家帮我看看,功能是实现了,不知道是否符合要求。
CREATE TABLE userinfo(
id NUMBER,
NAME VARCHAR2(20)
)

CREATE TABLE userdetail(
id NUMBER,
user_id NUMBER,
user_data VARCHAR2(20),
VALUE VARCHAR2(50)
)

INSERT INTO userinfo (id,NAME) VALUES(1,'张三');
INSERT INTO userinfo (id,NAME) VALUES(2,'李四');
INSERT INTO userinfo (id,NAME) VALUES(3,'王五');
COMMIT;


INSERT INTO userdetail (id,USER_ID,USER_DATA,VALUE) VALUES(1,1,'地址','北京市');
INSERT INTO userdetail (id,USER_ID,USER_DATA,VALUE) VALUES(2,1,'电话','123124324324');
INSERT INTO userdetail (id,USER_ID,USER_DATA,VALUE) VALUES(3,2,'证件号','23423423423423423');
INSERT INTO userdetail (id,USER_ID,USER_DATA,VALUE) VALUES(4,3,'邮编','133012');
INSERT INTO userdetail (id,USER_ID,USER_DATA,VALUE) VALUES(5,3,'QQ','567675767');
COMMIT;


SELECT a.NAME AS 姓名,
NVL((SELECT b.VALUE FROM userdetail b WHERE USER_DATA='地址' AND a.ID=b.USER_ID),'空') AS 地址,
NVL((SELECT c.VALUE FROM userdetail c WHERE USER_DATA='电话' AND a.ID=c.USER_ID),'空') AS 电话,
NVL((SELECT d.VALUE FROM userdetail d WHERE USER_DATA='证件号' AND a.ID=d.USER_ID),'空') AS 证件号,
NVL((SELECT e.VALUE FROM userdetail e WHERE USER_DATA='QQ' AND a.ID=e.USER_ID),'空') AS QQ,
NVL((SELECT f.VALUE FROM userdetail f WHERE USER_DATA='邮编' AND a.ID=f.USER_ID),'空') AS 邮编
FROM
(SELECT * FROM userinfo ) a
   发表时间:2011-03-30  
userinfo 表数据



userdetail 表数据



我的SQL执行结果


  • 大小: 3.7 KB
  • 大小: 6.9 KB
  • 大小: 14.3 KB
0 请登录后投票
   发表时间:2011-03-31  
我认为是在考你会不会使用 pivot
0 请登录后投票
   发表时间:2011-04-04  
面试什么职位考这种题
pivot好像是oracle11才有的函数,估计大家用11的不多吧,不知道也正常
0 请登录后投票
   发表时间:2011-04-07  
用decode函数可以,或者用case语句
0 请登录后投票
   发表时间:2011-04-08  
pivot SQL SERVER2005才新增的。
这题邹建写的一本SQL2000的书上有解决方案,很强大。
0 请登录后投票
   发表时间:2011-04-08  
扩展了视野~  谢谢LZ 分享。
0 请登录后投票
   发表时间:2011-04-08  
oracle 的 wm_concat 表示没鸭梨
0 请登录后投票
   发表时间:2011-04-08  
SELECT NAME AS 姓名,case when USER_DATA='地址' then value end 地址,case when USER_DATA='电话' then value end 电话,case when USER_DATA='证件号' then value end 证件号,case when USER_DATA='QQ' then value end QQ,case when USER_DATA='邮编' then value end 邮编  
FROM userinfo
0 请登录后投票
   发表时间:2011-04-08  
zhoutao_0116 写道
SELECT NAME AS 姓名,case when USER_DATA='地址' then value end 地址,case when USER_DATA='电话' then value end 电话,case when USER_DATA='证件号' then value end 证件号,case when USER_DATA='QQ' then value end QQ,case when USER_DATA='邮编' then value end 邮编  
FROM userinfo

但是 要如何把重复的  USER_ID 列 合并到一起去呢?
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics