在SQL Server 2008中将行转换为列

在SQL Server 2008中将行转换为列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有下表: oGroup oDate oValue -------------------------------- A 2014-01-01 20 A 2014-01-02 30 B 2014-01-01 5 B 2014-01-02 15 C 2014-01-01 40 C 2014-01-02 60 我希望得

我有下表:

oGroup     oDate          oValue
--------------------------------
A          2014-01-01     20
A          2014-01-02     30
B          2014-01-01     5
B          2014-01-02     15
C          2014-01-01     40
C          2014-01-02     60
我希望得到以下结果:

oGroup   2014-01-01     2014-01-02
----------------------------------
A        20             30
B        5              15
C        40             60
如何在SQL Server 2008中实现这一点

谢谢。

试试这个

我不确定,我没有试过这个

SELECT a.ogroup,
       a.ovalue AS '2014-01-01',
       b.ovalue AS '2014-01-02'
FROM   (SELECT *
        FROM   table
        WHERE  odate = '2014-01-01') AS a
       JOIN (SELECT *
             FROM   table
             WHERE  odate = '2014-01-02') AS b
         ON b.ogroup = a.ogroup  
试试这个

我不确定,我没有试过这个

SELECT a.ogroup,
       a.ovalue AS '2014-01-01',
       b.ovalue AS '2014-01-02'
FROM   (SELECT *
        FROM   table
        WHERE  odate = '2014-01-01') AS a
       JOIN (SELECT *
             FROM   table
             WHERE  odate = '2014-01-02') AS b
         ON b.ogroup = a.ogroup  
您可以使用:


这是
打印
输出的内容:

SELECT
    oGroup
    ,MAX(CASE WHEN oDate = CAST('20140101' AS DATE) THEN oValue END) AS [2014-01-01]
    ,MAX(CASE WHEN oDate = CAST('20140102' AS DATE) THEN oValue END) AS [2014-01-02]
FROM SampleData
GROUP BY oGroup
ORDER BY oGroup
您可以使用:


这是
打印
输出的内容:

SELECT
    oGroup
    ,MAX(CASE WHEN oDate = CAST('20140101' AS DATE) THEN oValue END) AS [2014-01-01]
    ,MAX(CASE WHEN oDate = CAST('20140102' AS DATE) THEN oValue END) AS [2014-01-02]
FROM SampleData
GROUP BY oGroup
ORDER BY oGroup
学习

使用
动态sql

declare @query nvarchar(max)
declare @cols nvarchar(max)

select @cols=stuff((select distinct ','+QUOTENAME(oDate) from piv for xml path(''),TYPE).value('.','nvarchar(max)'),1,1,'')

select @query='select * from piv
pivot
(
min(oValue)
for oDate in(' + @cols + ')
)as pivv;'

exec (@query)
继续学习

使用
动态sql

declare @query nvarchar(max)
declare @cols nvarchar(max)

select @cols=stuff((select distinct ','+QUOTENAME(oDate) from piv for xml path(''),TYPE).value('.','nvarchar(max)'),1,1,'')

select @query='select * from piv
pivot
(
min(oValue)
for oDate in(' + @cols + ')
)as pivv;'

exec (@query)

您可以通过
PIVOT
或使用
交叉选项卡来实现这一点。在google中搜索
PIVOT
,您将获得数千个答案供参考。检查此答案,您可以通过
PIVOT
或使用
交叉选项卡来实现此目的。在谷歌上搜索
PIVOT
,你会得到成千上万的答案供参考,检查这个答案并