Python 基于多列值的透视SQL表
我的SQL输出如下:Python 基于多列值的透视SQL表,python,sql-server,excel,python-3.x,pivot-table,Python,Sql Server,Excel,Python 3.x,Pivot Table,我的SQL输出如下: ------------------------------------ | Name | Identifier | Date | Value | ------------------------------------- | A | Bid | XX/XX | 10 | ------------------------------------- | A | Ask | XX/XX | 11 | ------------
------------------------------------
| Name | Identifier | Date | Value |
-------------------------------------
| A | Bid | XX/XX | 10 |
-------------------------------------
| A | Ask | XX/XX | 11 |
-------------------------------------
| B | Bid | YY/YY | 20 |
-------------------------------------
| B | Ask | YY/YY | 21 |
-------------------------------------
--------------------------------
| Name | Date | Bid | Ask |
--------------------------------
| A | XX/XX | 10 | 11 |
--------------------------------
| B | YY/YY | 20 | 21 |
--------------------------------
SELECT * FROM table where Name (LIKE 'A' or LIKE 'B') and Date between 'AA/AA' and 'ZZ/ZZ'
我希望的输出最好直接来自SQL或借助Python或Excel,如下所示:
------------------------------------
| Name | Identifier | Date | Value |
-------------------------------------
| A | Bid | XX/XX | 10 |
-------------------------------------
| A | Ask | XX/XX | 11 |
-------------------------------------
| B | Bid | YY/YY | 20 |
-------------------------------------
| B | Ask | YY/YY | 21 |
-------------------------------------
--------------------------------
| Name | Date | Bid | Ask |
--------------------------------
| A | XX/XX | 10 | 11 |
--------------------------------
| B | YY/YY | 20 | 21 |
--------------------------------
SELECT * FROM table where Name (LIKE 'A' or LIKE 'B') and Date between 'AA/AA' and 'ZZ/ZZ'
在SQL、Python或Excel中实现这一点的最佳方法是什么?我的问题是,我希望使用此数据的下一步只处理以所需输出表的形式出现的输入
编辑:
原始查询如下:
------------------------------------
| Name | Identifier | Date | Value |
-------------------------------------
| A | Bid | XX/XX | 10 |
-------------------------------------
| A | Ask | XX/XX | 11 |
-------------------------------------
| B | Bid | YY/YY | 20 |
-------------------------------------
| B | Ask | YY/YY | 21 |
-------------------------------------
--------------------------------
| Name | Date | Bid | Ask |
--------------------------------
| A | XX/XX | 10 | 11 |
--------------------------------
| B | YY/YY | 20 | 21 |
--------------------------------
SELECT * FROM table where Name (LIKE 'A' or LIKE 'B') and Date between 'AA/AA' and 'ZZ/ZZ'
在Python中,可以使用PD.melt并指定要保持不变的列。其他人将得到支点
有关更多信息:您可以使用pivot实现所需的输出。这是一项可以在所有数据分析框架(如excel、SQL等)中找到的功能 对于Excel,您可以通过以下链接获得所需结果: SQL: 我使用pivot函数编写了一个动态sql
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)
您可以发布原始查询并向我们提供有关您的问题/所需输出的更多详细信息吗?@floatingpurr发布原始查询并添加详细信息我正在使用Microsoft SQL Server