enter image description here I have 5 columns and i want to get values from those 5 columns and put them into a single column.
+---------------+----------+----------+----------+---------------+
| Option_1 | Option_2 | Option_3 | Option_4 | Option_5 |
+---------------+----------+----------+----------+---------------+
| Below average | Average | Good | Better | Above average |
+---------------+----------+----------+----------+---------------+
So in output i want Below Average, Average, Good, Better and above Average in one column Named Option
Union all can be done:
SELECT
Option1 AS Options
FROM (SELECT
option1
FROM tablename
UNION ALL
SELECT
option2
FROM tablename
UNION ALL
SELECT
option3
FROM tablename
UNION ALL
SELECT
option4
FROM tablename
UNION ALL
SELECT
option5
FROM tablename) tablename;
or
UNPIVOT
performs almost the reverse operation of PIVOT
, by rotating columns into rows.
SELECT
opt.Options
FROM (SELECT
*
FROM yourtable) t
UNPIVOT (Options FOR tables IN ([Option_1], [Option_2], [Option_3], [Option_4], [Option_5])) AS opt
ORDER BY tables;
For more info please visit: https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot
SELECT CONCAT(Option_1,', ',Option_2,', ',Option_3,' ,',Option_4,',',Option_5) as Option
FROM TAble1
if you want results as a one column but multiple rows
SELECT Option_1 AS Option FROM Table1
UNION ALL
SELECT Option_2 AS Option FROM Table1
UNION ALL
SELECT Option_3 AS Option FROM Table1
UNION ALL
SELECT Option_4 AS Option FROM Table1
UNION ALL
SELECT Option_5 AS Option FROM Table1
Using UNPIVOT
SELECT
rslt.Options
FROM (SELECT
*
FROM Table1 ) AS dt
UNPIVOT (Options FOR tables IN ([Option_1], [Option_2], [Option_3], [Option_4], [Option_5])) AS rslt
Sample Link
declare @table table( Option_1 varchar(50),Option_2 varchar(50), Option_3 varchar(50), Option_4 varchar(50), Option_5 varchar(50))
insert into @table
select 'Below average', 'Average', 'Good','Better','Above average'
select p.typename,p.numericvalue from (
select *
from @table
) a
unpivot(numericvalue for typename in([Option_1] ,[Option_2] , [Option_3] , [Option_4] , [Option_5] )) as p
order by typename
output
typename numericvalue
Option_1 Below average
Option_2 Average
Option_3 Good
Option_4 Better
Option_5 Above average
Sample Data
IF OBJECT_ID('dbo.Sampletable')IS NOT NULL
DROP TABLE Sampletable
GO
CREATE TABLE Sampletable (
Option_1 varchar(50)
,Option_2 varchar(50)
,Option_3 varchar(50)
,Option_4 varchar(50)
,Option_5 varchar(50)
)
INSERT INTO Sampletable
SELECT 'Below average', 'Average', 'Good','Better','Above average'
Using Dynamic Sql and Cross apply we get the expected result
DECLARE @DynamicCol nvarchar(max),@Sql nvarchar(max)
SELECT @DynamicCol=
STUFF((SELECT ', '+'('+''''+COLUMN_NAME+''''+','+ COLUMN_NAME +')'FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='Sampletable'
FOR XML PATH ('')),1,1,'')
SET @Sql='
SELECT Typename
,Numericvalue
FROM Sampletable t
CROSS APPLY (VALUES '+@DynamicCol+
') AS dt (Typename,Numericvalue )'
PRINT @Sql
EXEC (@Sql)
Sample demo Result
Typename Numericvalue
-------------------------
Option_1 Below average
Option_2 Average
Option_3 Good
Option_4 Better
Option_5 Above average
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.