你好,我是一个新的SQL。只是想知道这是否可能通过SQL:
- 表格**:(多个值仅在一个单元格中。)
| 第1列|第2列|
| - ------|- ------|
| "2023年1月1日"、"2023年1月2日"、"2023年1月3日"|用户A、用户B、用户C|
- 所需输出**:
| 第1列|第2列|
| - ------|- ------|
| 2023年1月1日|A使用者|
| 2023年1月2日|A使用者|
| 2023年1月3日|A使用者|
| 2023年1月1日|B使用者|
| 2023年1月2日|B使用者|
| 2023年1月3日|B使用者|
| 2023年1月1日|C使用者|
| 2023年1月2日|C使用者|
| 2023年1月3日|C使用者|
基本上,行中的每个日期都被分配给同一行中的所有用户。任何帮助或提示都将受到感谢。
谢谢! Screenshot of data/required table
我还不知道该怎么办
5条答案
按热度按时间ax6ht2ek1#
您可以使用
string_to_array
函数将字符串的所有部分作为数组的元素,然后对该数组使用unnest
函数以获得所需的结果,请检查以下内容:See demo
hk8txs482#
我们可以将
STRING_TO_ARRAY
与UNNEST
和LATERAL JOIN
组合使用:试用:db<>fiddle
STRING_TO_ARRAY
会将不同的日期和不同的用户划分为单独的项。UNNEST
将在单独的行中写入这些项。LATERAL JOIN
会将三个日期和三个用户放在一起(当然,根据您的数据,可以更少或更多),这样就创建了问题中显示的九行。它的工作原理与CROSS APPLY
方法类似,后者将在SQL Server DB上执行。ORDER BY
子句只是创建了与您的问题中相同的订单,如果不需要,我们可以删除它。问题并没有真正告诉我们是否需要它。vyswwuz23#
由于实现细节在不同的DBMS上会有所不同,下面是一个如何在MySQL(8.0+)中实现的示例:
参见:DBFIDDLE
注:
lstz6jyr4#
在sql server中,这可以使用string_split来完成
分贝提琴式链路
https://dbfiddle.uk/YNJWDPBq
pw136qt25#
在mysql中你可以这样做:
在此查看:https://dbfiddle.uk/_oGix9PD