我有一个存储这样的记录的表:
name | stat | value
--------------------------
object1 | stat1 | val1
object1 | stat2 | val2
object1 | stat3 | val3
object1 | stat4 | val4
Run Code Online (Sandbox Code Playgroud)
但我想查询数据,以便返回这样的行
name | stat1| stat2| stat3| stat4
-------------------------------------
object1 | val1 | val2 | val3 | val4
Run Code Online (Sandbox Code Playgroud)
我会使用案例陈述,或者如何实现这样的事情?我的例子只显示了4个可能的统计数据,但希望我可以创建足够动态的东西,如果我将来添加新的统计数据,则不必重写查询.如果那是不可能的,我的选择是什么?
可以说我有两张桌子:
1与用户和另一个用户记录哪些用户使用了什么代码.
Users ----- Id, Name 1, 'John' 2, 'Doe' Codes ------ Id, UserId, code 1, 1, 145 2, 1, 187 3, 2, 251
现在我想拉出一个导致他跟随的查询
Name, UsedCodes 'John', '145,187' 'Doe', '251'
如何使用查询或存储过程完成此操作?
假设我有这些数据:
Employee Task IsCurrent
-------- ---- ---------
Jeff 1 Yes
Jeff 2 No
Jane 1 No
Jane 2 Yes
Jane 3 No
Jane 4 No
Jake 1 Yes
Run Code Online (Sandbox Code Playgroud)
员工有一些任务,其中一个是最新的.任务编号表示一个排序 - 他们按顺序执行任务,当他们完成最后一个任务时循环回到开头.我想查询以查看接下来的三个任务.我想要这个结果集:
Employee CurrentTask NextTask NextTask2
-------- ----------- -------- ---------
Jeff 1 2 1
Jane 2 3 4
Jake 1 1 1
Run Code Online (Sandbox Code Playgroud)
这可能吗?我正在使用SQL 2005
更新:对不起,我没有说清楚任务编号不一定是后续的 - 即Mike可能实际上有任务10,23和223.所以我不能只是加入寻找下一个顺序任务编号.
我在SQL Server 2008中有以下视图.
DEPT | EMP_ID | EMP_NAME | P_DATE | HOURS_WORKED
Run Code Online (Sandbox Code Playgroud)
我希望视图是这样的:
DEPT | EMP_ID | EMP_NAME | 2012-09-28 | 2012-09-29 | 2012-09-30 | 2012-10-01 ...
Run Code Online (Sandbox Code Playgroud)
上面的日期列标题是P_DATE,其中是该员工在该特定日期的"Hours_Worked"值.
喜欢
2012-09-28
09:00:00
10:00:00
Run Code Online (Sandbox Code Playgroud)
我不确定我是否可以使用Pivot实现它.
请转到此链接以获得清晰的理解:SQL Server查看快照
这是对我之前问题的更新:多对多的关系
以前的解决方案工作正常,但现在我想要tgo一点点改善结果.我希望将所有波长值放在一行中.
因此,而不是以下结果:
DateTimeID Wavelength SensorID
11435 1581,665 334
11435 1515,166 334
11435 1518,286 335
Run Code Online (Sandbox Code Playgroud)
我想要有类似的东西:
DateTimeID Wavelength1 Wavelength2 SensorID
11435 1581,665 1515,166 334
11435 1518,286 335
Run Code Online (Sandbox Code Playgroud) 我有一个结果集的脚本,如下所示:
-- #Test (temptable)
Branch_Name C_Date Percentage
Branch 1 20140107 90
Branch 1 20140108 82
Branch 2 20140107 85
Branch 2 20140108 86
Run Code Online (Sandbox Code Playgroud)
我想转移这些数据,但是C_Date会被填充以获得7天的回复:
WHERE (1 = 1) AND
(tTable.C_Date > CONVERT(VARCHAR(10),GETDATE() -7, 112)) AND
(tEnter.C_Date < CONVERT(VARCHAR(10),GETDATE() -1, 112)).
Run Code Online (Sandbox Code Playgroud)
我试过了
Select * from #Test
pivot (avg (Percentage) for C_date in ([20140107],[20140108])) as PivotTable
Run Code Online (Sandbox Code Playgroud)
它给了我想要的数据(见下文),
Branch_Name 20140107 20140108
Branch 1 90 82
Branch 2 85 86
Run Code Online (Sandbox Code Playgroud)
但是如何让枢轴看到由GETDATE?填充的日期?我已经尝试将GETDATE命令放在每个[]中,但这显然不起作用.**注意,我的示例显示了2天,但我的查询是7天,不包括它运行的那天.
任何帮助表示感谢 - 谢谢!
就拿这个例子: http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx
我有一个简单的数据框:
type | code | date |value
0 apple | ap1 |08/12/14 |2
1 apple | ap1 |09/12/14 |12
2 apple | ap1 |10/12/14 |4
3 banana| b1 |08/12/14 |5
4 banana| b1 |09/12/14 |67
5 banana| b1 |10/12/14 |77
6 orange| o1 |08/12/14 |21
7 orange| o1 |09/12/14 |1
8 orange| o1 |10/12/14 |16
Run Code Online (Sandbox Code Playgroud)
我可以使用以下功能轻松地将日期作为列进行透视:
pivot = pd.pivot_table(data,values=('value'),rows=['code','type'],cols='date',aggfunc=np.sum)
Run Code Online (Sandbox Code Playgroud)
但是我找不到一种方法来使用累积和来代替np.sum,我想以以下格式显示数据吗?这可能吗?
type 08/12/14 09/12/14 10/12/14
apple 2 12 4
banana 7 79 81
orange 28 80 97
Run Code Online (Sandbox Code Playgroud) 我的结果来自以下格式的查询
ID CODE
----------
1 abc
1 xyz
1 def
1 pqr
1 jkl
1 tuv
Run Code Online (Sandbox Code Playgroud)
我希望结果采用以下格式
ID CODE1 CODE2 CODE3 CODE4 CODE5 CODE6
---------------------------------------
1 abc xyz def pqr jkl tuv
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用静态PIVOT查询来实现,但我面临的问题是该CODE列可能具有未知值,我希望我的列名称是固定的CODE1,CODE2依此类推CODE6.
有人可以帮我解决这个问题吗?
欢迎任何建议.
谢谢.
我想基于可以包含“动态”值(并非总是事先知道)的字段来透视表。
我可以通过对值进行硬编码来使其工作(这是不希望的):
SELECT *
FROM my_table
pivot(SUM(amount) FOR type_id IN (1,2,3,4,5,20,50,83,141,...);
Run Code Online (Sandbox Code Playgroud)
但是我无法使用查询来动态提供值:
SELECT *
FROM my_table
pivot(SUM(amount) FOR type_id IN (SELECT id FROM types);
---
090150 (22000): Single-row subquery returns more than one row.
SELECT *
FROM my_table
pivot(SUM(amount) FOR type_id IN (SELECT ARRAY_AGG(id) FROM types);
---
001038 (22023): SQL compilation error:
Can not convert parameter 'my_table.type_id' of type [NUMBER(38,0)] into expected type [ARRAY]
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
pivot ×10
sql ×5
sql-server ×4
t-sql ×2
date ×1
dynamic ×1
many-to-many ×1
mysql ×1
pandas ×1
pivot-table ×1
python ×1