sql问题,所有分数答谢!!@!!@

bdsq001 2016-04-14 01:07:21
1、两张表:
表1字段:姓名、性别、项目、结果
张三 男 空腹血糖2 1.9
张三 男 身高2 172
李四 男 空腹血糖2 1.7
李四 男 身高2 169

表2字段:姓名、性别、空腹血糖1、空腹血糖2、身高1、身高2
张三 男 1.5 null 173 null
李四 男 1.8 null 168 null

Q:怎么把表1中的结果插入到表2中去,期望得到的效果如下:
姓名、性别、空腹血糖1、空腹血糖2、身高1、身高2
张三 男 1.5 1.9 173 172
李四 男 1.8 1.7 168 169

跪谢。
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginnnnnnnn 2016-04-14
  • 打赏
  • 举报
回复
SELECT a.姓名,a.性别,a.空腹血糖1,b.空腹血糖2,a.身高1,b.身高2
	FROM 表2 a
		CROSS APPLY(SELECT MAX(CASE WHEN 项目 = '空腹血糖2' THEN 结果 ELSE NULL END) AS [空腹血糖],
							MAX(CASE WHEN 项目 = '身高2' THEN 结果 ELSE NULL END) AS [身高2]
						FROM 表1 
							WHERE 姓名 = a.姓名
							GROUP BY 姓名) b
hhhttt_ 2016-04-14
  • 打赏
  • 举报
回复
update 表2
set 空腹血糖2=(select 结果 from 表1  where 表1.姓名= 表2.姓名 and 表1.项目='空腹血糖2')
    ,身高2=(select 结果 from 表1  where 表1.姓名= 表2.姓名 and 表1.项目='身高2')
bdsq001 2016-04-14
  • 打赏
  • 举报
回复
SELECT A.姓名,A.性别, ISNULL(A.空腹血糖1,B.空腹血糖1) AS 空腹血糖1, ISNULL(B.空腹血糖2,A.空腹血糖2) AS 空腹血糖2, ISNULL(A.身高1,B.身高1) AS 身高1, ISNULL(B.身高2,A.身高2) AS 身高2 FROM 表2 A LEFT JOIN (SELECT 姓名,性别, MAX(CASE WHEN 项目='空腹血糖1' THEN 结果 ELSE '' END) AS 空腹血糖1, MAX(CASE WHEN 项目='身高1' THEN 结果 ELSE '' END) AS 身高1, MAX(CASE WHEN 项目='空腹血糖2' THEN 结果 ELSE '' END) AS 空腹血糖2, MAX(CASE WHEN 项目='身高2' THEN 结果 ELSE '' END) AS 身高2 FROM 表1 GROUP BY 姓名,性别) AS B ON A.姓名=B.姓名 AND A.性别=B.性别
唐诗三百首 2016-04-14
  • 打赏
  • 举报
回复

create table 表1
(姓名 varchar(20), 性别 varchar(20), 项目 varchar(20), 结果 varchar(20))

insert into 表1
 select '张三',	 '男',  '空腹血糖2', '1.9' union all
 select '张三',	 '男',	 '身高2',	 '172' union all
 select '李四',	 '男',	 '空腹血糖2',	 '1.7' union all
 select '李四',	 '男',	 '身高2',	 '169'

create table 表2
(姓名 varchar(20), 性别 varchar(20), 空腹血糖1 varchar(20), 空腹血糖2 varchar(20), 身高1 varchar(20), 身高2 varchar(20))

insert into 表2
 select '张三',	 '男',	 '1.5', null, '173', null union all
 select '李四',	 '男',	 '1.8', null, '168', null


update t2
  set t2.空腹血糖2=t1.空腹血糖2,
        t2.身高2=t1.身高2
  from 表2 t2
  inner join (select 姓名,[空腹血糖2],[身高2]
                     from 表1 a
                     pivot(min(结果) for 项目 in([空腹血糖2],[身高2])) p) t1 on t2.姓名=t1.姓名


select * from 表2
/*
姓名                   性别                   空腹血糖1                空腹血糖2                身高1                  身高2
-------------------- -------------------- -------------------- -------------------- -------------------- --------------------
张三                   男                    1.5                  1.9                  173                  172
李四                   男                    1.8                  1.7                  168                  169

(2 row(s) affected)
*/
RINK_1 2016-04-14
  • 打赏
  • 举报
回复
SELECT A.姓名,A.性别, ISNULL(A.空腹血糖1,B.空腹血糖1) AS 空腹血糖1, ISNULL(A.空腹血糖2,B.空腹血糖2) AS 空腹血糖2, ISNULL(A.身高1,B.身高1) AS 身高1, ISNULL(A.身高2,B.身高2) AS 身高2 FROM 表2 A LEFT (SELECT 姓名,性别, MAX(CASE WHEN 项目='空腹血糖1' THEN 结果 ELSE '' END) AS 空腹血糖1, MAX(CASE WHEN 项目='身高1' THEN 结果 ELSE '' END) AS 身高1, MAX(CASE WHEN 项目='空腹血糖2' THEN 结果 ELSE '' END) AS 空腹血糖2, MAX(CASE WHEN 项目='身高2' THEN 结果 ELSE '' END) AS 身高2 FROM 表1 GROUP BY 姓名,性别) AS B ON A.姓名=B.姓名 AND A.性别=B.性别
bdsq001 2016-04-14
  • 打赏
  • 举报
回复
自己顶一下,期待回复。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧