简体   繁体   中英

Getting different column values into one single column

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM