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 nullQ:怎么把表1中的结果插入到表2中去,期望得到的效果如下:
姓名、性别、空腹血糖1、空腹血糖2、身高1、身高2
张三 男 1.5 1.9 173 172
李四 男 1.8 1.7 168 169跪谢。
表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 nullQ:怎么把表1中的结果插入到表2中去,期望得到的效果如下:
姓名、性别、空腹血糖1、空腹血糖2、身高1、身高2
张三 男 1.5 1.9 173 172
李四 男 1.8 1.7 168 169跪谢。
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.性别
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)
*/
set 空腹血糖2=(select 结果 from 表1 where 表1.姓名= 表2.姓名 and 表1.项目='空腹血糖2')
,身高2=(select 结果 from 表1 where 表1.姓名= 表2.姓名 and 表1.项目='身高2')
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.性别
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