嗨,我要做的是:我有2张桌子
第一个是

Person Table
PID | Name | Surname | Area1 | Area2 | Area3 | OwnerID |
1   | John | Doe     |   5   |   6   |   8   |    1    |
2   | Jack | Danniel |   8   |   2   |   4   |    2    |


第二个是

Area Table
AID | Value | Name  | OwnerID |
1   |  Java | Area1 |    1    |
2   |  Orac | Area2 |    1    |
3   |  Delp | Area1 |    2    |
4   |  Css  | Area3 |    1    |


如果要选择Owner1,如何查询类似的结果?

PID | Name | Surname | Java  | Orac  | Css   | OwnerID |
1   | John | Doe     |   5   |   6   |   8   |    1    |

最佳答案

WITH A AS (
   SELECT PID, Name Name1, Surname, Area, _Area, OwnerID OwnerID1
   from Person A
   unpivot (_Area FOR Area IN (Area1, Area2, Area3)) C
 )

 select PID, Name1, Surname, sum(Java) JAVA, sum(Orac) Orac, sum(CSS) CSS, OwnerID
 from A
 inner join Area B
   on Area = B.Name
   and A.OwnerID1 = B.OwnerID
 pivot (sum(_Area) for Value in (JAVA, ORAC, CSS)) C
 where OwnerID1 = 1
 group by PID, Name1, Surname, OwnerID


SQL Fiddle

10-05 23:36