2015-07-31 5 views
0

у меня есть эти данные в виде таблицы в SQL:SQL несколько строк в одну строку с несколькими столбцами

Product Size  Colour Number 

------- ----  ------ ------ 

Jacket  S  Red   3 

Jacket  M  Red   2 

Jacket  S  Green  5 

Shirt  S  Blue  1 

Shirt  L  Blue  9 

и я хочу, чтобы преобразовать его динамически, не зная, сколько строк я мог бы, объединив все тот же продукт строк примерно на следующее:

Product SRed MRed SGreen  SBlue LBlue 

------- ---- ---- ------  ----- ----- 

Jacket  3  2  5 

Shirt         1  9 

Возможно ли это и как?

Благодаря

+0

это число столбцов фиксированных или вы хотите иметь это динамично? Если динамический, вы удовлетворены таблицей (product, colorSize, amount)? – maraca

+0

Возможный дубликат http://stackoverflow.com/questions/21692871/combine-multiple-rows-into-multiple-columns-dynamically-in-sql-server –

+0

можно, но он нарушает основной принцип реляционной базы данных, попробуйте избегай это –

ответ

0

Я не уверен, если вы ищете что-то динамическое или статическое, но это будет решать статический вопрос:

declare @SRed As int 
set @SRed = (Select Number from YourTable where Size = 'S' and Colour = 'Red' and Product = 'Jacket') 
declare @MRed As int 
set @MRed = (Select Number from YourTable where Size = 'M' and Colour = 'Red' and Product = 'Jacket') 
declare @SGreen As int 
set @SGreen = (Select Number from YourTable where Size = 'S' and Colour = 'Green' and Product = 'Jacket') 
declare @SBlue As int 
set @SBlue = (Select Number from YourTable where Size = 'S' and Colour = 'Blue' and Product = 'Shirt') 
declare @LBlue As int 
set @LBlue = (Select Number from YourTable where Size = 'L' and Colour = 'Blue' and Product = 'Shirt') 
Create Table #Jacket(Product varchar(20), SRed int, MRed int, SGreen int, IsInTable int) 

insert into #Jacket(Product, SRed, MRed, SGreen) 
Values(
'Jacket', 
@SRed, 
@MRed, 
@SGreen 
) 
insert into #Jacket(Product, SRed, MRed, SGreen) 
Values(
'shirt', 
0, 
0, 
0 
) 

Create Table #Shirt(Product varchar(20), SBlue int, LBlue int) 
insert into #Shirt(Product, SBlue, LBlue) 
Values(
'Shirt', 
@SBlue, 
@LBlue 
) 

insert into #Shirt(Product, SBlue, LBlue) 
Values(
'Jacket', 
0, 
0 
) 
Select s.Product, j.SRed, j.MRed, j.SGreen, s.SBlue, s.LBlue 
from #Shirt s 
left outer join #Jacket j on j.Product = s.Product 
Смежные вопросы