2014-02-27 54 views

回答

1

只是不得不做PIVOT这样的,所以这里是我的代码修改您的具体情况:

SELECT * FROM 
(
    SELECT P_ID, 
      Lang, 
      NumberedLang = 'Lang' + CAST(ROW_NUMBER() OVER 
       (PARTITION BY P_ID ORDER BY Lang) AS NVARCHAR(100))    
    FROM YourTableName 
) AS OrderLangs 
PIVOT (MAX(Lang) FOR NumberedLang IN (Lang1, Lang2)) AS PivotedLangs 

这里是一个SQL Fiddle告诉你,它的工作原理。

如果您不想指定所有不同的NumberedLang值,那么您将不得不在使用基于文本的SQL中执行所有代码时使用“动态”枢轴。尽管由于没有可用的查询计划,它们可能效率很低。

+0

现在我只有5种不同的语言,但在后续阶段使用动态枢轴将非常有用。谢谢! – Coconuts

0

这是一个有点难看,但你可以做这样的事情:

select p_id 
, max(case when langNum=1 then lang else null end) as Lang1 
, max(case when langNum=2 then lang else null end) as Lang2 
, max(case when langNum=3 then lang else null end) as Lang3 
, max(case when langNum=4 then lang else null end) as Lang4 
, max(case when langNum=5 then lang else null end) as Lang5 
-- ... 
from ( 
    select p_id 
     , lang 
     -- Get a number for each row, starting from 1 for each p_id: 
     , row_number() over (partition by p_id order by lang) as LangNum 
    from theTable 
) as x 
group by p_id 
+0

Thx为您的答复!有用! – Coconuts

相关问题