如何将列值转换为行?

How do i can convert Column Values Into Row?

这里我有 table 'TABLE_1' 作为


|ID  | Name | ACID1 | ACVALUE1 | ACID2  | ACVALUE2 | ACID3 | ACVALUE3 |
|----------------------------------------------------------------------
| 1  |ABC   |  10   |  82.50   |   20   | 175.95   |  40   |  125.75  |           
| 2  |IJK   |  30   | 120.55   |   20   |  68.30   |  50   |   25.45  |
| 3  |LMN   |  40   |  62.50   |   10   |  87.25   |  30   |   40.50  |
 ----------------------------------------------------------------------

另一个table是AC_TABLE,其ID在上面table中记录为ACID1,ACID2,...

___________________
|ID    |   Name    | 
|-------------------
|10    |   AC1     |
|20    |   AC2     |
|30    |   AC3     |
|40    |   AC4     |
|50    |   AC5     |
-------------------

现在我想要以下格式的结果

_____________________________
ID | Name |  ACName |  ACVALUE
------------------------------
1  | ABC  |   AC1   |  82.50
1  | ABC  |   AC2   | 175.95
1  | ABC  |   AC4   | 125.75
2  | IJK  |   AC3   | 120.55
2  | IJK  |   AC2   |  68.30
2  | IJK  |   AC5   |  25.45
3  | LMN  |   AC4   |  62.50
3  | LMN  |   AC1   |  87.25
3  | LMN  |   AC3   |  40.50
-------------------------------

请帮助我获得想要的结果。

使用Cross Apply 逆透视多列。

首先使用 cross apply 反转 Table_1,然后将结果与 ac_table table 合并。试试这个。

SELECT a.id,
       a.name,
       b.name AS ACName,
       cs.ACValue
FROM   Table_1 a
       CROSS apply (VALUES (ACVALUE1,ACID1),
                           (ACVALUE2,ACID2),
                           (ACVALUE3,ACID3))cs(acvalue, ac)
       JOIN ac_table b
         ON cs.ac = b.id 

SQLFIDDLE DEMO