两行分成两列

Mik*_*keF 4 sql-server pivot

我有这张桌子:

Name        Value      Sequence    
-------------------------------    
test        A1         1           
test        A2         3           
test2       A20        5         
test2       A10        8         
Run Code Online (Sandbox Code Playgroud)

我在对名称进行分组并获得 Value+ 和 Value- 之后,如下所示:

Name        Value+         Value-    
-----------------------------------    
test        A1             A2          
test2       A20            A10         
Run Code Online (Sandbox Code Playgroud)

规则是:

  • 来自具有较低序列的行的值转到值+
  • 具有较高序列的行的值变为值-
  • 每个名字只有两行

我该怎么做?

spa*_*dba 5

这是带有交叉表的解决方案:

DECLARE @SampleData TABLE (
    Name varchar(50),
    Value varchar(50),
    Sequence int
)

INSERT INTO @SampleData
VALUES
 ('test'        ,'A1',         1)       
,('test'        ,'A2',         3)       
,('test2'       ,'A20',        5)       
,('test2'       ,'A10',        8);

WITH RankedData AS (
    SELECT *, RN = ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Sequence)
    FROM @SampleData
)
SELECT Name, 
    [Value+] = MAX(CASE WHEN RN = 1 THEN Value ELSE '' END),
    [Value-] = MAX(CASE WHEN RN = 2 THEN Value ELSE '' END)
FROM RankedData
GROUP BY Name
Run Code Online (Sandbox Code Playgroud)