SRAJENDRAN
SRAJENDRAN

Reputation: 71

pivot varchar columns in SQL Server?

enter image description here

I tried to get some result into a pivot table but not get the expected result.Here by I have put the code and result.

DECLARE @TblIdeaCategory TABLE 
(
IdeaImplement varchar(2000),
IdeaCategory varchar(2000)
)

INSERT INTO @TblIdeaCategory values('Metrics Feedback One  #1','MetricFeedback')
INSERT INTO @TblIdeaCategory values('Metrics Feedback Two #1','MetricFeedback')
INSERT INTO @TblIdeaCategory values('Analysis Feedback One #1','AnalysisFeedback')
INSERT INTO @TblIdeaCategory values('Analysis Feedback Two #1','AnalysisFeedback')
INSERT INTO @TblIdeaCategory values('Idea Generation Feedback One #1','IdeaGenerationFeedback')
INSERT INTO @TblIdeaCategory values('Idea Generation Feedback Two #1','IdeaGenerationFeedback')


select 
 IdeaGenerationFeedback,AnalysisFeedback,MetricFeedback from 

(select IdeaImplement,IdeaCategory
 from  @TblIdeaCategory as board
 ) resultTable
pivot (
 max(IdeaImplement)  for IdeaCategory in (IdeaGenerationFeedback,AnalysisFeedback,MetricFeedback))  as resultpivot


 select  IdeaImplement,IdeaCategory from @TblIdeaCategory

Upvotes: 3

Views: 97

Answers (2)

MJoy
MJoy

Reputation: 1369

The following query should do what you want:

DECLARE @TblIdeaCategory TABLE 
(
IdeaImplement varchar(2000),
IdeaCategory varchar(2000)
)

INSERT INTO @TblIdeaCategory values('Metrics Feedback One  #1','MetricFeedback')
INSERT INTO @TblIdeaCategory values('Metrics Feedback Two #1','MetricFeedback')
INSERT INTO @TblIdeaCategory values('Analysis Feedback One #1','AnalysisFeedback')
INSERT INTO @TblIdeaCategory values('Analysis Feedback Two #1','AnalysisFeedback')
INSERT INTO @TblIdeaCategory values('Idea Generation Feedback One #1','IdeaGenerationFeedback')
INSERT INTO @TblIdeaCategory values('Idea Generation Feedback Two #1','IdeaGenerationFeedback')


select 
 IdeaGenerationFeedback,AnalysisFeedback,MetricFeedback from 

(select IdeaImplement,IdeaCategory,ROW_NUMBER() OVER(PARTITION BY IdeaCategory ORDER BY (SELECT 1)) AS RNO
 from  @TblIdeaCategory as board
 ) resultTable
pivot (
MAX(IdeaImplement)  for IdeaCategory in (IdeaGenerationFeedback,AnalysisFeedback,MetricFeedback))  as resultpivot

The result is as below,

IdeaGenerationFeedback            AnalysisFeedback           MetricFeedback
Idea Generation Feedback One #1   Analysis Feedback One #1   Metrics Feedback One #1
Idea Generation Feedback Two #1   Analysis Feedback Two #1   Metrics Feedback Two #1

Upvotes: 1

Tim Biegeleisen
Tim Biegeleisen

Reputation: 520968

I think you actually would want to use UNPIVOT here rather than PIVOT, but in any case you could just use a series of unions, which might perform better anyway.

SELECT IdeaGenerationFeedback AS IdeaImplement, 'IdeaGenerationFeedback' AS IdeaCategory
FROM yourOriginalTable
UNION ALL
SELECT AnalysisFeedback, 'AnalysisFeedback' FROM yourOriginalTable
UNION ALL
SELECT MetricFeedback, 'MetricFeedback' FROM yourOriginalTable;

Upvotes: 0

Related Questions