首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于多个列值的透视SQL表

基于多个列值的透视SQL表
EN

Stack Overflow用户
提问于 2018-03-20 22:45:09
回答 2查看 481关注 0票数 0

我的SQL输出如下:

代码语言:javascript
复制
------------------------------------
| Name | Identifier | Date  | Value |
-------------------------------------
|  A   |    Bid     | XX/XX |   10  |
-------------------------------------
|  A   |    Ask     | XX/XX |   11  |
-------------------------------------
|  B   |    Bid     | YY/YY |   20  |
-------------------------------------
|  B   |    Ask     | YY/YY |   21  |
-------------------------------------

我想要的输出最好是直接来自SQL,或者借助Python或Excel,如下所示:

代码语言:javascript
复制
--------------------------------
| Name | Date  |  Bid  |  Ask  |
--------------------------------
|  A   | XX/XX |   10  |   11  |
--------------------------------
|  B   | YY/YY |   20  |   21  |
--------------------------------

在SQL、Python或Excel中实现此目标的最佳方法是什么?我的问题是,我希望使用此数据的下一步只处理“期望输出”表形式的输入。

编辑:原始查询如下:

代码语言:javascript
复制
SELECT * FROM table where Name (LIKE 'A' or LIKE 'B') and Date between 'AA/AA' and 'ZZ/ZZ'
EN

回答 2

Stack Overflow用户

发布于 2018-03-20 23:23:51

您可以使用pivot实现所需的输出。它是一种可以在所有数据分析框架中找到的功能,如excel、SQL等。

对于Excel,您可以通过以下链接获得所需的结果:http://www.excel-easy.com/data-analysis/pivot-tables.html

SQL:

我已经用pivot函数写了一个动态sql

代码语言:javascript
复制
 create table tbl1 ( name varchar(100),Identifier  varchar(100), Date_val varchar(100), Value  int);

    INSERT INTO tbl1 values ('A','Bid','XX/XX',10),('A','Ask','XX/XX',11),('b','Bid','YY/YY',20),
    ('b','Ask','YY/YY',21)

    DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)


    select @cols = STUFF((SELECT ',' + QUOTENAME(Identifier) 
                        from tbl1
                        group by Identifier
                        order by Identifier
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')



    set @query = 'SELECT name,Date_val,' + @cols + ' from 
                 (
                    select  name,Identifier, Date_val, value
                    from tbl1
                ) x
                pivot 
                (
                    sum(value)
                    for Identifier in (' + @cols + ')
                ) p '

    execute (@query)
票数 1
EN

Stack Overflow用户

发布于 2018-03-20 23:02:33

在Python Pandas中,您可以使用PD.melt并指定希望保持不变的列。其他的将会被旋转。

有关更多信息,请访问:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt.html

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

https://stackoverflow.com/questions/49387281

复制
相关文章

相似问题

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