首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Sql server表中的表列转换为垂直数据?

如何将Sql server表中的表列转换为垂直数据?
EN

Stack Overflow用户
提问于 2015-04-08 15:06:37
回答 3查看 1.4K关注 0票数 2

我想将一个Sql server表转换为另一个。

原表

代码语言:javascript
运行
复制
    Period      Date          Portfolio   Benchmark

    Pre0Month   12/31/2014   -0.0001      -0.0025
    Pre1Month   11/31/2014    0.0122       0.0269
    Pre2Month   10/31/2014    0.0176       0.0244

改造后

代码语言:javascript
运行
复制
    Returns      Pre0Month   Pre1Month    Pre2Month

    Portfolio   -0.0001      0.0122       0.0176
    Benchmark   -0.0025      0.0269       0.0244
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-08 15:42:35

考虑到表的名称为MyTable,您可以通过以下方式将其枢轴化:

代码语言:javascript
运行
复制
SELECT * FROM
(
  SELECT Period, [Returns], value
  FROM MyTable
  CROSS APPLY
  (
    SELECT 'Portofolio', CAST(Portofolio as varchar(10)) 
    UNION ALL
    SELECT 'Benchmark', CAST(Benchmark as varchar(10)) 
  ) c([Returns], value)
) d
PIVOT
(
    MAX(value)
    FOR Period IN (Pre0Month, Pre1Month, Pre2Month)
) piv;
票数 5
EN

Stack Overflow用户

发布于 2015-04-08 15:42:58

这就需要将支点和联合国和平与发展工作队结合起来:

代码语言:javascript
运行
复制
DECLARE @t TABLE(period VARCHAR(32),[date] DATETIME, portfolio DECIMAL(28,4), benchmark DECIMAL(28,4));
INSERT INTO @t(period,[date],portfolio,benchmark)VALUES('Pre0Month','2014-12-31',-0.0001,-0.0025);
INSERT INTO @t(period,[date],portfolio,benchmark)VALUES('Pre1Month','2014-11-30',0.0122,0.0269);
INSERT INTO @t(period,[date],portfolio,benchmark)VALUES('Pre2Month','2014-10-31',0.0176,0.0244);

SELECT
    *
FROM
    (
        SELECT
            *
        FROM
            (
                SELECT
                    period,
                    portfolio,
                    benchmark
                FROM
                    @t
            ) AS t
            UNPIVOT(
                value
                FOR Returns IN (portfolio,benchmark)
            ) AS up
    ) AS t
    PIVOT(
        MAX(value)
        FOR period IN ([Pre0Month],[Pre1Month],[Pre2Month])
    ) AS p;

结果如下:

代码语言:javascript
运行
复制
Returns     Pre0Month   Pre1Month   Pre2Month
benchmark   -0.0025     0.0269      0.0244
portfolio   -0.0001     0.0122      0.0176
票数 2
EN

Stack Overflow用户

发布于 2015-04-08 15:28:20

因为您使用的是Server,所以可以使用pivot命令来执行您想做的事情。看看这里:https://technet.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx

您也可以使用DateDiff函数按月份将日期分隔开来。https://msdn.microsoft.com/en-us/library/ms189794.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29518456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档