我似乎反对这个问题很多,我的数据格式如下:
+----+----------------------+
| id | colors |
+----+----------------------+
| 1 | Red,Green,Blue |
| 2 | Orangered,Periwinkle |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)
但我希望它的格式如下:
+----+------------+
| id | colors |
+----+------------+
| 1 | Red |
| 1 | Green |
| 1 | Blue |
| 2 | Orangered |
| 2 | Periwinkle |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?什么是这种操作甚至叫做?
我想在redshift中使用generate系列函数,但还没有成功.
redshift文档说它不受支持.以下代码确实有效:
select *
from generate_series(1,10,1)
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
...
10
Run Code Online (Sandbox Code Playgroud)
我想对约会做同样的事情.我尝试了很多变种,包括:
select *
from generate_series(date('2008-10-01'),date('2008-10-10 00:00:00'),1)
Run Code Online (Sandbox Code Playgroud)
踢出去:
ERROR: function generate_series(date, date, integer) does not exist
Hint: No function matches the given name and argument types.
You may need to add explicit type casts. [SQL State=42883]
Run Code Online (Sandbox Code Playgroud)
还尝试过:
select *
from generate_series('2008-10-01 00:00:00'::timestamp,
'2008-10-10 00:00:00'::timestamp,'1 day')
Run Code Online (Sandbox Code Playgroud)
并试过:
select *
from generate_series(cast('2008-10-01 00:00:00' as datetime),
cast('2008-10-10 00:00:00' as datetime),'1 day')
Run Code Online (Sandbox Code Playgroud)
两个都踢了出来:
ERROR: function generate_series(timestamp without time zone, timestamp without time zone, …Run Code Online (Sandbox Code Playgroud) 如何将字段(例如CSV字符串)拆分为多行的问题已经得到解答:将 值拆分为多行.
但是,这个问题涉及MSSQL,并且答案使用了没有RedShift等价物的各种功能.
为了完整起见,这是我想做的一个例子:
目前的数据:
| Key | Data |
+-----+----------+
| 1 | 18,20,22 |
| 2 | 17,19 |
Run Code Online (Sandbox Code Playgroud)
所需数据:
| Key | Data |
+-----+----------+
| 1 | 18 |
| 1 | 20 |
| 1 | 22 |
| 2 | 17 |
| 2 | 19 |
Run Code Online (Sandbox Code Playgroud)
现在,我可以建议在CSV字段中使用小的,有限数量的元素的情况:在所有可能的数组位置上使用split_part和union,如下所示:
SELECT Key, split_part(Data, ',', 1)
FROM mytable
WHERE split_part(Data, ',', 1) != ""
UNION
SELECT Key, split_part(Data, ',', 2)
FROM mytable
WHERE split_part(Data, ',', 2) …Run Code Online (Sandbox Code Playgroud) 如何使用分隔符 (,) 将列中的值数组拆分为 Redshift 中的相应行?
\n\n输入数据:-
\n\n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94 \nEmpid | Items \n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94 \n1001| A, B \n1002| B \n1003| C, D, E \nRun Code Online (Sandbox Code Playgroud)\n\n所需输出:-
\n\n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94 \nEmpid | Items \n\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94\xe2\x80\x94 \n1001| A \n1001| B \n1002| B \n1003| C \n1003| D \n1003| E \nRun Code Online (Sandbox Code Playgroud)\n\n任何帮助表示赞赏。
\n\n谢谢
\n有一个像这样的表:
uid | segmentids
-------------------------+----------------------------------------
f9b6d54b-c646-4bbb-b0ec | 4454918|4455158|4455638|4455878|4455998
asd7a0s9-c646-asd7-b0ec | 1265899|1265923|1265935|1266826|1266596
gd3355ff-cjr8-assa-fke0 | 2237557|2237581|2237593
laksnfo3-kgi5-fke0-b0ec | 4454918|4455158|4455638|4455878
Run Code Online (Sandbox Code Playgroud)
如何使用以下命令创建新表:
uid | segmentids
-------------------------+---------------------------
f9b6d54b-c646-4bbb-b0ec | 4454918
f9b6d54b-c646-4bbb-b0ec | 1265899
f9b6d54b-c646-4bbb-b0ec | 2237557
f9b6d54b-c646-4bbb-b0ec | 4454918
f9b6d54b-c646-4bbb-b0ec | 4454918
asd7a0s9-c646-asd7-b0ec | 1265899
asd7a0s9-c646-asd7-b0ec | 1265923
asd7a0s9-c646-asd7-b0ec | 1265935
asd7a0s9-c646-asd7-b0ec | 1266826
asd7a0s9-c646-asd7-b0ec | 1266596
Run Code Online (Sandbox Code Playgroud)
细分的数量是动态的,可以随每条记录而变化.我尝试使用带分隔符的Split函数,但它需要string中的索引,这里是动态的.
有什么建议?