| Author |
Topic |
|
kenlok
Starting Member
16 Posts |
Posted - 2009-04-27 : 04:11:12
|
| Hello, Help!I would like to display the table1 into tabel2 record like this.Please help me to solve the problem.... thanks a lot!Select * from table1ColorName Size Qty-----------------------Color1 S 30Color1 M 38Color1 L 39Color1 XL 50Color2 S 30Color2 M 30Color2 L 30Color2 XL 30Select * from table2ColorName Size1 Size2 Size3 Size4 Size5 Size6 Size7 Size8 Qty1 Qty2 Qty3 Qty4 Qty5 Qty6 Qty7 Qty8--------------------------------------------------------------------------------------------------Color1 S M L XL null null null null 30 38 39 50 null null null nullColor2 S M L XL null null null null 30 30 30 30 null null null nullScript--------------------------------------------------------------------------------------------------Create table #table1 ( ColorName varchar(20) , Size varchar(12), Qty varchar(12)) Create table #table2 ( ColorName varchar(20) , Size1 varchar(12), Qty1 varchar(12), Size2 varchar(12), Qty2 varchar(12), Size3 varchar(12), Qty3 varchar(12), Size4 varchar(12), Qty4 varchar(12), Size5 varchar(12), Qty5 varchar(12), Size6 varchar(12), Qty6 varchar(12), Size7 varchar(12), Qty7 varchar(12), Size8 varchar(12), Qty8 varchar(12))insert into #table1(ColorName, Size, Qty) values ('Color1','S','30')insert into #table1(ColorName, Size, Qty) values ('Color1','M','38')insert into #table1(ColorName, Size, Qty) values ('Color1','L','39')insert into #table1(ColorName, Size, Qty) values ('Color1','XL','50')insert into #table1(ColorName, Size, Qty) values ('Color2','S','30')insert into #table1(ColorName, Size, Qty) values ('Color2','M','30')insert into #table1(ColorName, Size, Qty) values ('Color2','L','30')insert into #table1(ColorName, Size, Qty) values ('Color2','XL','30') |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-27 : 05:13:02
|
[code]DECLARE @Sample TABLE ( ColorName VARCHAR(20) NOT NULL, Size VARCHAR(2) NOT NULL, Qty INT NOT NULL )INSERT @SampleSELECT 'Color1', 'S', 30 UNION ALLSELECT 'Color1', 'M', 38 UNION ALLSELECT 'Color1', 'L', 39 UNION ALLSELECT 'Color1', 'XL', 50 UNION ALLSELECT 'Color2', 'S', 30 UNION ALLSELECT 'Color2', 'M', 30 UNION ALLSELECT 'Color2', 'L', 30 UNION ALLSELECT 'Color2', 'XL', 30SELECT ColorName, MAX(CASE WHEN recID = 1 THEN Size ELSE NULL END) AS Size1, MAX(CASE WHEN recID = 2 THEN Size ELSE NULL END) AS Size2, MAX(CASE WHEN recID = 3 THEN Size ELSE NULL END) AS Size3, MAX(CASE WHEN recID = 4 THEN Size ELSE NULL END) AS Size4, MAX(CASE WHEN recID = 5 THEN Size ELSE NULL END) AS Size5, MAX(CASE WHEN recID = 6 THEN Size ELSE NULL END) AS Size6, MAX(CASE WHEN recID = 7 THEN Size ELSE NULL END) AS Size7, MAX(CASE WHEN recID = 8 THEN Size ELSE NULL END) AS Size8, MAX(CASE WHEN recID = 1 THEN Qty ELSE NULL END) AS Qty1, MAX(CASE WHEN recID = 2 THEN Qty ELSE NULL END) AS SQty2, MAX(CASE WHEN recID = 3 THEN Qty ELSE NULL END) AS Qty3, MAX(CASE WHEN recID = 4 THEN Qty ELSE NULL END) AS Qty4, MAX(CASE WHEN recID = 5 THEN Qty ELSE NULL END) AS Qty5, MAX(CASE WHEN recID = 6 THEN Qty ELSE NULL END) AS Qty6, MAX(CASE WHEN recID = 7 THEN Qty ELSE NULL END) AS Qty7, MAX(CASE WHEN recID = 8 THEN Qty ELSE NULL END) AS Qty8FROM ( SELECT ColorName, Size, Qty, CASE Size WHEN 'S' THEN 1 WHEN 'M' THEN 2 WHEN 'L' THEN 3 WHEN 'XL' THEN 4 ELSE 0 END AS recID FROM @Sample ) AS dGROUP BY ColorNameORDER BY ColorName[/code] E 12°55'05.63"N 56°04'39.26" |
 |
|
|
denfer
Starting Member
12 Posts |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-27 : 05:21:24
|
PIVOT works great if all aggregations are of same type.Also, this particular problem has two pivot values, one for size and one CORRESPONDING for quantity.It makes the use of PIVOT a little more cumbersome. E 12°55'05.63"N 56°04'39.26" |
 |
|
|
kenlok
Starting Member
16 Posts |
Posted - 2009-04-27 : 06:01:09
|
| Thanks for Peso and denfer supports!But I have question about the Size.I will not know the Size char is "S, M, L, XL" in every time. May be there will "M, LL, XL..."Is it any solution to get the Size char auto ? |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2009-04-27 : 06:19:04
|
Yes.DECLARE @Sample TABLE ( ColorName VARCHAR(20) NOT NULL, Size VARCHAR(2) NOT NULL, Qty INT NOT NULL )INSERT @SampleSELECT 'Color1', 'S', 30 UNION ALLSELECT 'Color1', 'M', 38 UNION ALLSELECT 'Color1', 'L', 39 UNION ALLSELECT 'Color1', 'XL', 50 UNION ALLSELECT 'Color2', 'S', 30 UNION ALLSELECT 'Color2', 'M', 30 UNION ALLSELECT 'Color2', 'L', 30 UNION ALLSELECT 'Color2', 'XL', 30SELECT ColorName, MAX(CASE WHEN recID = 1 THEN Size ELSE NULL END) AS Size1, MAX(CASE WHEN recID = 2 THEN Size ELSE NULL END) AS Size2, MAX(CASE WHEN recID = 3 THEN Size ELSE NULL END) AS Size3, MAX(CASE WHEN recID = 4 THEN Size ELSE NULL END) AS Size4, MAX(CASE WHEN recID = 5 THEN Size ELSE NULL END) AS Size5, MAX(CASE WHEN recID = 6 THEN Size ELSE NULL END) AS Size6, MAX(CASE WHEN recID = 7 THEN Size ELSE NULL END) AS Size7, MAX(CASE WHEN recID = 8 THEN Size ELSE NULL END) AS Size8, MAX(CASE WHEN recID = 1 THEN Qty ELSE NULL END) AS Qty1, MAX(CASE WHEN recID = 2 THEN Qty ELSE NULL END) AS SQty2, MAX(CASE WHEN recID = 3 THEN Qty ELSE NULL END) AS Qty3, MAX(CASE WHEN recID = 4 THEN Qty ELSE NULL END) AS Qty4, MAX(CASE WHEN recID = 5 THEN Qty ELSE NULL END) AS Qty5, MAX(CASE WHEN recID = 6 THEN Qty ELSE NULL END) AS Qty6, MAX(CASE WHEN recID = 7 THEN Qty ELSE NULL END) AS Qty7, MAX(CASE WHEN recID = 8 THEN Qty ELSE NULL END) AS Qty8FROM ( SELECT ColorName, Size, Qty, ROW_NUMBER() OVER (PARTITION BY ColorName ORDER BY Size) AS recID FROM @Sample ) AS dGROUP BY ColorNameORDER BY ColorName E 12°55'05.63"N 56°04'39.26" |
 |
|
|
kenlok
Starting Member
16 Posts |
Posted - 2009-04-27 : 21:08:16
|
| Peso, Thanks your support!The problem is solve |
 |
|
|
|
|
|