感觉不错,学习下

问题:表Table1的结构为: 
姓名 科目 成绩 
张三 语文  20  
张三 数学  30  
张三 英语  50  
李四 语文  70  
李四 数学  60  
李四 英语  90  

怎样通过select语句把他变成以下结构: 
姓名 语文 数学 英语 
张三  20   30   50  
李四  70   60   90

方法1:

select DISTINCT D.姓名,A.语文,B.数学,C.英语 from destTbl as D left join 

(select 姓名,成绩 as 语文  from destTbl where 科目 = '语文') AS A on A.姓名=D.姓名 left join 

(select 姓名,成绩 as 数学  from destTbl where 科目 = '数学') AS B on B.姓名=D.姓名 left join

(select 姓名,成绩 as 英语  from destTbl where 科目 = '英语') AS C on C.姓名=D.姓名 

方法2:

select 姓名,
max(case 科目 when '语文' then 成绩 else 0 end) 语文,
max(case 科目 when '数学' then 成绩 else 0 end) 数学,
max(case 科目 when '英语' then 成绩 else 0 end) 英语
from destTbl
group by 姓名

问题2:

 

表一(Table1)
商品名称mc   商品总量sl
   A          100
   B          120
表二(Table2)
商品名称mc   出库数量sl
    A          10
    A          20
    B          10
    B          20
    B          30

用一条SQL语句算出商品A,B目前还剩多少?要求用SQl-86和SQL-92两种标准写法分别实现

方法:

 

select A.mc,A.s1,B.s2,( A.s1 - (case when B.s2 is Null then 0 else B.s2 end)  ) as 差 from table1 as A left join

( select mc,sum(s2) as s2 from table2 group by mc ) as B on A.mc = B.mc