2015-01-05 5 views
0

У меня есть две таблицыДинамически Bind GridView DataField

table1 

productName   category  S_Id value 

p1     cat1   1  year 
p1     cat1   2  test1 
p1     cat1   3  test2 


table2 

S_Id     specificatio 

1       year 
2       test1 
3       test2 

и моя потребность связать вид сетки, как

productName  category year  test1 test2 

p1     cat1  1   2  3 

Я попытался

select P.productName,P.category,S.specification from table1 P inner join table2 S on(P.S_Id=S.S_Id) 

но показывает результат Like

productName  category  specification 

    p1     cat1  year 
    p1     cat1  test1 
    p1     cat1  test2 

кто может помочь, как достичь this.Thanks заранее

+0

Вы должны поворачиваться вам данные. – dario

ответ

1

Попробуйте это,

SELECT * FROM (SELECT  P.productName, 
      P.category, 
      S.specification,P.S_Id 
FROM  #table1 P 
INNER JOIN #table2 S ON(P.S_Id = S.S_Id))A 
PIVOT (MAX(A.S_Id) FOR A.SPECIFICATION IN ([year],[test1],[test2])) PV 
+0

Спасибо ..... работаю супер – Arun

+0

Как мы можем обновить приведенную выше таблицу>? – Arun

+0

Обратитесь к: http://stackoverflow.com/questions/726582/updates-on-pivots-in-sql-server-2008 – PP006

3

Попробуйте это:

create table table1 
(
productname varchar(10), 
category varchar(10), 
S_Id int, 
value varchar(10) 
); 

insert into table1 values('p1','cat1',1,'year'); 
insert into table1 values('p1','cat1',2,'test1'); 
insert into table1 values('p1','cat1',3,'test2'); 

create table table2 
(
S_Id int, 
specification varchar(10) 
); 

insert into table2 values(1,'year'); 
insert into table2 values(2,'test1'); 
insert into table2 values(3,'test2'); 

/Dynamic Query для ожидаемого результата/

Declare @cols varchar(max); 
Declare @sql varchar(max); 

select @cols = STUFF((SELECT ',' + QUOTENAME(specification) 
       from table2 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,''); 

SET @SQL = N'select productName,category,'[email protected]+' 
    from 
    (
    select t1.productname,t1.category,t2.S_ID,t2.Specification 
    from table1 t1 
    inner join 
    table2 t2 
    on t1.S_ID = t2.S_ID 
    )x 
    pivot 
    (
     MAX(S_Id) 
     FOR SPECIFICATION IN ('[email protected]+') 
    ) PV'; 
EXEC(@SQL);  

Результат:

productName category year test1 test2 
------------------------------------------ 
p1    cat1  1  2  3 
Смежные вопросы