SQL Server: объединение нескольких столбцов мер в 1 столбец - PullRequest
0 голосов
/ 12 марта 2019

Я новичок в SQL и старался изо всех сил искать эту тему, прежде чем спрашивать.

У меня есть данные в этом формате:

Current State Format

Iнужно в этом формате:

Need in this format

Я понимаю, что это, вероятно, очень легко, но любая помощь будет принята с благодарностью.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 марта 2019

Вы можете использовать APPLY, если вы работаете с SQL Server:

SELECT t.year, tt.Months, tt.Amount
FROM TABLE t CROSS APPLY
     ( VALUES (1, 'January', [Month1]), 
              (2, 'February', [Month2]), 
               . . .  
     ) tt(seq, Months, Amount)
ORDER BY tt.seq, t.year;
0 голосов
/ 12 марта 2019

Вы можете попробовать: взяв предоставленные вами столбцы, я сделал этот SQL, надеюсь, это поможет!Просто измените таблицу на оригинальную

SELECT Year, 
case when Month = 'Month1' then 'January'
    when Month = 'Month2' then 'February'
    when Month = 'Month3' then 'March' 
    else '' end as Month,
    Amount  
FROM   
   (SELECT Year, Month1, Month2, Month3  
   FROM  [dbo].[ExampleMonths]) tb1  
    UNPIVOT  
   (Amount for Month IN   
      (tb1.Month1, tb1.Month2, tb1.Month3)      
    ) AS uNp

enter image description here

0 голосов
/ 12 марта 2019

Вы можете попробовать это на SQL SERVER:

CREATE TABLE TestPvt (Year varchar(32), January int, february int,  
    March int);  
GO  
INSERT INTO TestPvt VALUES ('Actual 2019',700,220,456);  
INSERT INTO TestPvt VALUES ('Budget 2019',200,752,500);  

SELECT Year, Month, Amount  
FROM   
   (SELECT Year, January, february, March  
   FROM TestPvt) p  
UNPIVOT  
   (Amount FOR Month IN   
      (January, february, March)  
)AS unpvt;

Результат:

Year    Month   Amount
Actual 2019 January 700
Actual 2019 february    220
Actual 2019 March   456
Budget 2019 January 200
Budget 2019 february    752
Budget 2019 March   500
...