Click here to Skip to main content
15,891,033 members
Please Sign up or sign in to vote.
3.50/5 (2 votes)
See more:
I have a generate color table as I mention below with pivote methods

SQL
color1     color 2
Green       --
yellow      --
--          Black
--          White

I want to show this

XML
color1     color 2
Green       Black
yellow      White

Please help to resolve it
Posted
Comments
What have you tried?
DINESH K MAURYA 1-Jul-14 2:26am    
I have a table xyz which row is
colortype colorname
--------------
color1 Green
color2 black
color1 yelow
color1 Pink
color2 white

I have pivot it
and reslut as in question but i want to show like
color1 color 2
__________________
Green Black
yellow White

I have show in gridview it

Hi,

You can do it in this way:
SQL
CREATE TABLE #TempColors (Color1 VARCHAR(50), Color2 VARCHAR(50));
 
INSERT INTO #TempColors (Color1, Color2)
VALUES ('Green', NULL), ('Yellow', NULL), (NULL, 'Black'), (NULL, 'White'), ('Pink', NULL);
 
SELECT Color1, Color2 FROM #TempColors;
 

;WITH IDs_CTE
     AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ID
         FROM #TempColors),
     Color1_CTE
     AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ID, Color1
         FROM #TempColors
         WHERE Color1 IS NOT NULL),
     Color2_CTE
     AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS ID, Color2
         FROM #TempColors
         WHERE Color2 IS NOT NULL)
SELECT Color1_CTE.Color1, Color2_CTE.Color2
FROM   IDs_CTE
       LEFT OUTER JOIN Color1_CTE
                    ON Color1_CTE.ID = IDs_CTE.ID
       LEFT OUTER JOIN Color2_CTE
                    ON Color2_CTE.ID = IDs_CTE.ID
WHERE  Color1_CTE.Color1 IS NOT NULL OR Color2_CTE.Color2 IS NOT NULL
 

DROP TABLE #TempColors;
 
Share this answer
 
v2
Comments
DINESH K MAURYA 2-Jul-14 2:30am    
Thanks for reply
If the color1 and color2 are dynamic then how to do this
Andrius Leonavicius 2-Jul-14 2:43am    
Do you mean that it could be color3, color4, etc.?
DINESH K MAURYA 2-Jul-14 2:44am    
Yes may be increase or descress
because i have generate this table after pivot
Andrius Leonavicius 2-Jul-14 3:40am    
OK, I get it now. I gave you a dynamic pivot solution recently: Transpose query result[^]. If you're using it, then you can easily rearrange values. For example, change
ORDER BY Attribute_SubID
to
ORDER BY Attribute_Sub DESC
and after
[...] AS RowNumber
FROM #DataTable:
add this line:
WHERE Attribute_Sub <> ''--''
DINESH K MAURYA 2-Jul-14 5:08am    
As you suggest that I have change accordingly
blow modified code, but same result


CREATE TABLE #DataTable (Attribute_SubID INT, AttributeID INT, Attribute_Sub NVARCHAR(50));

INSERT INTO #DataTable (Attribute_SubID, AttributeID, Attribute_Sub) VALUES (3, 2, 'xyz'), (4, 2, 'abc'), (3, 2, 'def');


DECLARE @ColumnsTable TABLE (Col VARCHAR(10));

INSERT INTO @ColumnsTable (Col)
SELECT DISTINCT Attribute_SubID FROM #DataTable;

DECLARE @SQL VARCHAR(MAX);

SET @SQL = ';WITH Data
AS
(
SELECT Attribute_SubID, Attribute_Sub, ROW_NUMBER() OVER (PARTITION BY Attribute_SubID
ORDER BY Attribute_Sub desc) AS RowNumber
FROM #DataTable
where Attribute_Sub <> ''--''
)
SELECT ' + (SELECT STUFF((SELECT ', ISNULL([' + Col + '], ''--'') AS [' + Col + ']'
FROM @ColumnsTable
FOR XML PATH('')), 1, 2, '')) +
'
FROM Data
PIVOT
(
MAX(Attribute_Sub)
FOR Attribute_SubID IN
(' + (SELECT STUFF((SELECT ', [' + Col + ']'
FROM @ColumnsTable
FOR XML PATH('')), 1, 2, '')) + ')
) AS pvt;';

--SELECT @SQL;

EXEC(@SQL);


DROP TABLE #DataTable;
Hi,

Try this.


SQL
create table myColour
(
color1 varchar(20),
color2 varchar(20),
)

INSERT INTO myColour (color1) values ('White')
INSERT INTO myColour (color1) values ('Black')
INSERT INTO myColour (color2) values ('Yellow')
INSERT INTO myColour (color2) values ('Green')

SELECT * FROM myColour


--exec getMyColour
CREATE PROC getMyColour
AS
BEGIN

CREATE TABLE #tmpTableA(
	[ID] [INT] IDENTITY(1,1),
	[color1] [varchar](20)
)

INSERT INTO #tmpTableA SELECT color1 from myColour where isnull(color1,'') <> ''

CREATE TABLE #tmpTableB(
	[ID] [INT] IDENTITY(1,1),
	[color2] [varchar](20)
)

INSERT INTO #tmpTableB SELECT color2 from myColour where isnull(color2,'') <> ''


SELECT [color1],[color2] from #tmpTableA A, #tmpTableB B
where A.id=B.id

END



Hope this will help you.

Cheers.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900