代码之家  ›  专栏  ›  技术社区  ›  David Brierton

SQL Server:在表中断开逗号分隔的字符串和匹配的值

  •  0
  • David Brierton  · 技术社区  · 6 年前

    3years_andmore,access_ccc,access_sdl,associate_iii,ccc_tickets,desoto_counter,phone_call__property_tax,ticketing,trainer
    

    3years_andmore,access_ccc,access_sdl,associate_iii,ccc_tickets,desoto_counter,phone_call__dmv,ticketing,trainer
    

    第3行:

    5_minutes,access_ccc,access_sdl,associate_ii,ccc_tickets,desoto_counter,lessthan_3years,phone_call__operations___title_by_mail_inquiry,trainer
    

    access_ccc,access_sdl,associate_ii,ccc_customer_request_manager_other,ccc_tickets,desoto_counter,lessthan_3years,phone_call__associate_requesting_manager__customer_requesting_mr_brierton,trainer
    

    字段中没有真正的顺序,也没有相同的标记,但是否有一种方法至少可以排序到一个新表中,并将它们拆分和匹配,以查看哪些票具有相同的标记?

    SELECT 
        [id],
        [url],
        [external_id],
        [type],
        [subject],
        [description],
        [priority],
        [status],
        [recipient],
        [requester_id],
        [submitter_id],
        [assignee_id],
        [organization_id],
        [group_id],
        [collaborator_ids],
        [forum_topic_id],
        [problem_id],
        [has_incidents],
        [due_at],
        [tags],
        [via],
        [custom_fields],
        [satisfaction_rating],
        [sharing_agreement_ids],
        [followup_ids],
        [ticket_form_id],
        [created_at],
        [updated_at],
        [channel]
    FROM 
        [Brierton].[dbo].[Tickets]
    WHERE
        created_at BETWEEN '2017-11-01' AND '2018-08-23' 
        AND ',' + tags + ',' LIKE '%,' + 'ccc_tickets' + ',%'
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   sticky bit    6 年前

    string_split()

    SELECT t.id,
           x.value
           FROM tickets t
                CROSS APPLY (SELECT value
                                    FROM string_split(t.tags, ',')) x;
    

    SELECT x.value,
           count(*)
           FROM tickets t
                CROSS APPLY (SELECT value
                                    FROM string_split(t.tags, ',')) x
           GROUP BY x.value
           ORDER BY count(*) DESC;
    

    db<>fiddle