Sql server 2008 如何在SQL Server 2008中将行转换为列

Sql server 2008 如何在SQL Server 2008中将行转换为列,sql-server-2008,Sql Server 2008,我有一张桌子 F1 F2 ----------------- name Happy Company a City Gurgaon name Deepak Company b City Delhi 我需要输出为- name company city ----------------------- Happy a Gurgaon Deepak b Delhi 我正在使用查询 SELECT CASE W

我有一张桌子

F1      F2
-----------------
name    Happy
Company a
City    Gurgaon
name    Deepak
Company b
City    Delhi
我需要输出为-

name    company   city
-----------------------    
Happy     a       Gurgaon
Deepak    b       Delhi
我正在使用查询

SELECT
   CASE WHEN F1='name'
    THEN F2 ELSE NULL END) AS name,
   CASE WHEN F1='Company'
     THEN F2 ELSE NULL END) AS Company,
   CASE WHEN F1='City'
     THEN F2 ELSE NULL END) AS city
FROM table1
但我得到的结果是:

name    company      city
-----------------------------
Happy       
          a 
                Gurgaon
Deepak      
          b 
                Delhi

有人能帮忙吗?我不想使用PIVOT。这可以通过使用内部联接来实现吗?创建一个表以插入带有标识字段的元素

CREATE TABLE #TEMP(ID INT IDENTITY(1,1), F1 VARCHAR(20), F2 VARCHAR(20))

INSERT INTO #TEMP
SELECT * FROM
(
 SELECT 'name' F1,    'Happy'  F2
 UNION ALL
 SELECT 'Company', 'a'
 UNION ALL
 SELECT 'City',    'Gurgaon'
 UNION ALL
 SELECT 'name',    'Deepak'
 UNION ALL
 SELECT 'Company', 'b'
 UNION ALL
 SELECT 'City',    'Delhi'
)TAB
由于您没有每个集合的Id,我们需要在每3条记录之后生成单独的Id 然后根据那个Id旋转

结果


你可以用pivot来做,在给定的链接中尝试答案我想用self-join来做这个可能的重复你有某种列或值显示Happy、a和Gurgaon都属于同一行吗?现在您没有显示任何将值关联到同一行的方法。好的..您是对的。。我将尝试添加一个值为-1,1,1,2,2的新列
SELECT name, Company,City
FROM 
(
       -- Generate seperate Id after every 3 records
       SELECT F1,F2,CAST((ID/3.5)AS INT)+1 RNO  
       FROM #TEMP
)P
PIVOT(MIN(F2)
      FOR F1 IN (name, Company,City)) AS PVTTable