我正在寻找一种有效的方法将行转换为SQL服务器中的列,我听说PIVOT不是很快,我需要处理大量的记录.
这是我的例子:
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
Run Code Online (Sandbox Code Playgroud)
这是我的结果:
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我该如何建立结果?
如果我有一个MySQL表看起来像这样:
company_name action pagecount ------------------------------- Company A PRINT 3 Company A PRINT 2 Company A PRINT 3 Company B EMAIL Company B PRINT 2 Company B PRINT 2 Company B PRINT 1 Company A PRINT 3
是否可以运行MySQL查询以获得如下输出:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages ------------------------------------------------------------- CompanyA 0 0 1 3 CompanyB 1 1 2 0
这个想法pagecount可能会有所不同,因此输出列数量应反映出每个action/ pagecount对的一列,然后是每个点击次数company_name.我不确定这是否被称为数据透视表,但有人建议?
我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....
......但是我要试一试.
现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)
从我的谷歌搜索中查看一些示例
pd.DataFrame.pivot因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.
您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.
import numpy as np
import pandas as pd
from numpy.core.defchararray import add
np.random.seed([3,1415])
n = 20
cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)
df = pd.DataFrame(
add(cols, arr1), columns=cols
).join(
pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)
key row item col val0 val1
0 key0 row3 item1 col3 0.81 0.04
1 key1 …Run Code Online (Sandbox Code Playgroud) 我已经阅读了MS数据透视表上的内容,但我仍然遇到问题.
我有一个正在创建的临时表,我们会说第1列是商店号,第2列是周数,最后第3列是某种类型的总和.周数也是动态的,商店数是静态的.
Store Week xCount
------- ---- ------
102 1 96
101 1 138
105 1 37
109 1 59
101 2 282
102 2 212
105 2 78
109 2 97
105 3 60
102 3 123
101 3 220
109 3 87
Run Code Online (Sandbox Code Playgroud)
我希望它作为一个数据透视表出来,像这样:
Store 1 2 3 4 5 6....
-----
101 138 282 220
102 96 212 123
105 37
109
Run Code Online (Sandbox Code Playgroud)
将数字存储在侧面,将数字存储在顶部.
我的任务是提出翻译以下数据的方法:
date category amount
1/1/2012 ABC 1000.00
2/1/2012 DEF 500.00
2/1/2012 GHI 800.00
2/10/2012 DEF 700.00
3/1/2012 ABC 1100.00
Run Code Online (Sandbox Code Playgroud)
进入以下内容:
date ABC DEF GHI
1/1/2012 1000.00
2/1/2012 500.00
2/1/2012 800.00
2/10/2012 700.00
3/1/2012 1100.00
Run Code Online (Sandbox Code Playgroud)
空白点可以是NULL或空白,也可以是好的,并且类别需要是动态的.另一个可能的警告是,我们将以有限的容量运行查询,这意味着临时表已经出局.我已经尝试过研究并且已经登陆了,PIVOT但是在我真的不理解它之前我从未使用过它,尽管我尽了最大的努力去解决它.谁能指出我正确的方向?
有没有人知道如何在PostgreSQL中创建交叉表查询?
例如,我有下表:
Section Status Count
A Active 1
A Inactive 2
B Active 4
B Inactive 5
Run Code Online (Sandbox Code Playgroud)
我想查询返回以下交叉表:
Section Active Inactive
A 1 2
B 4 5
Run Code Online (Sandbox Code Playgroud)
这可能吗?
试图找到一些简单的SQL Server PIVOT示例.我发现的大多数例子都涉及计算或总结数字.我只想转动一些字符串数据.例如,我有一个返回以下内容的查询.
Action1 VIEW
Action1 EDIT
Action2 VIEW
Action3 VIEW
Action3 EDIT
Run Code Online (Sandbox Code Playgroud)
我想使用PIVOT(如果可能的话)来产生如下结果:
Action1 VIEW EDIT
Action2 VIEW NULL
Action3 VIEW EDIT
Run Code Online (Sandbox Code Playgroud)
PIVOT功能可以实现这一点吗?
我有一张这样的桌子......
CustomerID DBColumnName Data
--------------------------------------
1 FirstName Joe
1 MiddleName S
1 LastName Smith
1 Date 12/12/2009
2 FirstName Sam
2 MiddleName S
2 LastName Freddrick
2 Date 1/12/2009
3 FirstName Jaime
3 MiddleName S
3 LastName Carol
3 Date 12/1/2009
Run Code Online (Sandbox Code Playgroud)
我想要这个......
这可能使用PIVOT吗?
CustomerID FirstName MiddleName LastName Date
----------------------------------------------------------------------
1 Joe S Smith 12/12/2009
2 Sam S Freddrick 1/12/2009
3 Jaime S Carol 12/1/2009
Run Code Online (Sandbox Code Playgroud) 我有一个简单的查询:
select * from countries
Run Code Online (Sandbox Code Playgroud)
结果如下:
country_name
------------
Albania
Andorra
Antigua
.....
Run Code Online (Sandbox Code Playgroud)
我想在一行中返回结果,所以像这样:
Albania, Andorra, Antigua, ...
Run Code Online (Sandbox Code Playgroud)
当然,我可以编写一个PL/SQL函数来完成这项工作(我已经在Oracle 10g中完成了),但是对于这个任务是否有更好的,最好是非特定于Oracle的解决方案(或者可能是内置函数) ?
我通常会用它来避免子查询中的多行,所以如果一个人有一个以上的公民身份,我不希望她/他在列表中是重复的.
我的问题是基于SQL Server 2005上的类似问题.
更新:我的功能如下:
CREATE OR REPLACE FUNCTION APPEND_FIELD (sqlstr in varchar2, sep in varchar2 ) return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
OPEN rec FOR sqlstr;
LOOP
FETCH rec INTO field;
EXIT WHEN rec%NOTFOUND;
ret := ret || field || sep;
END LOOP;
if length(ret) …Run Code Online (Sandbox Code Playgroud) 如何在SQL中简单地使用行切换列?是否有任何简单的转置命令?
即转此结果:
Paul | John | Tim | Eric
Red 1 5 1 3
Green 8 4 3 5
Blue 2 2 9 1
Run Code Online (Sandbox Code Playgroud)
进入这个:
Red | Green | Blue
Paul 1 8 2
John 5 4 2
Tim 1 3 9
Eric 3 5 1
Run Code Online (Sandbox Code Playgroud)
PIVOT 这种情况看起来太复杂了.
pivot ×10
sql ×7
sql-server ×6
t-sql ×4
case ×1
crosstab ×1
group-by ×1
mysql ×1
oracle ×1
pandas ×1
pivot-table ×1
postgresql ×1
python ×1