分配值插入利用枢轴或逆透视特定列

问题描述 投票:1回答:2

我有以下结构的表:

+-------+-----------+--------+----------+--------+
| RefNo |  TranType |  Code  | Remarks  | Amount |
+-------+-----------+--------+----------+--------+
|     1 | BD        | 400201 | abcc dfr |    200 |
|     1 | BD        | 400202 | abcc dfr |    200 |
|     2 | BD        | 400204 | defrt    |    300 |
|     2 | BD        | 400205 | defrt    |    300 |
+-------+-----------+--------+----------+--------+

我需要将这些值转的格式如下:

+-------+--------+--------+----------+----------+--------+
| RefNo | Code1  | Code2  | TranType | Remarks  | Amount |
+-------+--------+--------+----------+----------+--------+
|     1 | 400201 | 400202 | BD       | abcc dfr |    200 |
|     2 | 400204 | 400205 | BD       | defrt    |    300 |
+-------+--------+--------+----------+----------+--------+
sql-server
2个回答
1
投票

你并不需要使用PIVOT,您可以使用一个简单的查询做到这一点。

SELECT t1.refno, 
       t1.code AS Code1, 
       t2.code AS Code2, 
       t1.trantype, 
       t1.amount 
FROM   @table t1 
       INNER JOIN @table t2 
               ON t1.refno = t2.refno                      
                  AND T1.code < T2.code 

Online Demo


0
投票

你可以试试下面的查询。

;WITH Tab (RefNo,Code,TranType,Remarks,Amount,rowno) 
AS
(SELECT  T.RefNo 
         , T.Code
         ,TranType
         ,Remarks
         ,Amount
         , RN = ROW_NUMBER() OVER (PARTITION BY T.RefNo ORDER BY  T.Code )
   FROM   Table1 T)

   SELECT RefNo,Code1 = MAX( CASE WHEN N.rowno=1 THEN N.Code ELSE 0 END ),
   Code2 = MAX( CASE WHEN N.rowno=2 THEN N.Code ELSE 0 END ) ,
   TranType,Remarks,Amount FROM Tab n
   GROUP BY N.RefNo,TranType,Remarks,Amount
© www.soinside.com 2019 - 2024. All rights reserved.