在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
,你会得到成千上万的答案供参考,检查这个答案并