如何使用Cross应用SQL中的单独行分开一个以上的逗号分隔列

发布于 2025-02-03 08:34:38 字数 1662 浏览 3 评论 0原文

I have one table having following rows

NamePhonesCourses
ABC123, 456HTML, Java
XYZ321, 654PHP, CSS

now I want to write a SELECT query to get these comma separated Phone and Courses as a separate row.通过使用此选项查询,我会产生结果,直到电话列,但粘在第二列。 Select query is

SELECT 
    Name, 
    value phone,
    courses
FROM 
    tblName 
    CROSS APPLY STRING_SPLIT(phones, ',');

This query shows me following results:

NamePhonesCourses
ABC123HTML, Java
ABC456HTML, Java
XYZ321PHP, CSS
XYZ654PHP, CSS

Please help me to split Courses column as like Phones and want to yield following results:

NamePhonesCourses
ABC123HTML
ABC456HTML
ABC123Java
ABC456Java
XYZ321PHP
XYZ654PHP
XYZ321CSS
XYZ654CSS

I have one table having following rows

NamePhonesCourses
ABC123, 456HTML, Java
XYZ321, 654PHP, CSS

now I want to write a SELECT query to get these comma separated Phone and Courses as a separate row. By using this SELECT query I yield results till Phone column but stuck at 2nd column. Select query is

SELECT 
    Name, 
    value phone,
    courses
FROM 
    tblName 
    CROSS APPLY STRING_SPLIT(phones, ',');

This query shows me following results:

NamePhonesCourses
ABC123HTML, Java
ABC456HTML, Java
XYZ321PHP, CSS
XYZ654PHP, CSS

Please help me to split Courses column as like Phones and want to yield following results:

NamePhonesCourses
ABC123HTML
ABC456HTML
ABC123Java
ABC456Java
XYZ321PHP
XYZ654PHP
XYZ321CSS
XYZ654CSS

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

脱离于你 2025-02-10 08:34:38

由于 - 根据您的描述 - 您使用交叉应用,并且您的查询已成功执行,因此这意味着您使用的是SQL Server DB,而不是我的SQL。您可以进行两个交叉应用以获得预期的结果。 This will produce exactly the outcome you have shown in your question:

SELECT name, phone, value courses FROM
(SELECT name, value phone, courses 
FROM tblName CROSS APPLY STRING_SPLIT(phones, ',')) x
CROSS APPLY STRING_SPLIT(courses, ',')
ORDER BY name, courses, phone;

You can verify this here: db< >fiddle

But this is very risky and you really should avoid such comma-separated contents in one column.我强烈建议将来为不同值创建单独的列。

Since - according to your description - you used CROSS APPLY and your query was successfully executed, this means you are using a SQL Server DB, not MY SQL. You can do two CROSS APPLY to get your expected result. This will produce exactly the outcome you have shown in your question:

SELECT name, phone, value courses FROM
(SELECT name, value phone, courses 
FROM tblName CROSS APPLY STRING_SPLIT(phones, ',')) x
CROSS APPLY STRING_SPLIT(courses, ',')
ORDER BY name, courses, phone;

You can verify this here: db<>fiddle

But this is very risky and you really should avoid such comma-separated contents in one column. I highly recommend to create separate columns for the different values in future.

献世佛 2025-02-10 08:34:38

好吧,我自己找到了解决方案。
here is the working query:

SELECT 
    t1.name,
    t1.phone,
    value course
FROM
    (SELECT 
        first_name, 
        value phone,
        courses
    FROM 
        tblName 
        CROSS APPLY STRING_SPLIT(phones, ',')) t1
    CROSS APPLY STRING_SPLIT(t1.courses, ',');  

Thanks everyone.

Well I found the solution myself.
here is the working query:

SELECT 
    t1.name,
    t1.phone,
    value course
FROM
    (SELECT 
        first_name, 
        value phone,
        courses
    FROM 
        tblName 
        CROSS APPLY STRING_SPLIT(phones, ',')) t1
    CROSS APPLY STRING_SPLIT(t1.courses, ',');  

Thanks everyone.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文