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.   

    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.性别
      

  2.   


    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)
    */
      

  3.   

    update 表2
    set 空腹血糖2=(select 结果 from 表1  where 表1.姓名= 表2.姓名 and 表1.项目='空腹血糖2')
        ,身高2=(select 结果 from 表1  where 表1.姓名= 表2.姓名 and 表1.项目='身高2')
      

  4.   

     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.性别 
      

  5.   

    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