我正在使用SQL Server,并且试图找出如何在dbo.tickets中的列tags
中进行搜索并搜索诸如lwr_tickets
之类的短语。
现在,我有一个查询,该查询将按日期获取所有用户的票证并在其中显示名称。我试图弄清楚如何查看在哪个分支的票。
因此,lwr_tickets
处的票总数。数据库中的tags
字段名有一长串的标签名,每个票证都用逗号分隔。因此,我试图弄清楚如何编写遍历标签列的内容,然后只返回其中包含lwr_tickets
的内容,以获取该分支的总数。
任何帮助将不胜感激。
找到所有门票:
select
u.Id,
u.Name,
t.submitter_id,
COUNT(*) as numberOfTickets
from Users as u
join Tickets as t on t.submitter_id = u.Id and t.created_at between '2017/11/01' and '2018/08/23'
group by u.Id, u.Name, t.submitter_id
现在尝试添加将搜索lwr_tickets
的位置
尝试:
select
u.Id,
u.Name,
t.submitter_id,
COUNT(*) as numberOfTickets
from Users as u
join Tickets as t on t.submitter_id = u.Id and t.created_at between '2017/11/01' and '2018/08/23'
group by u.Id, u.Name, t.submitter_id
where t.tags = "lwr_tickets"
答案 0 :(得分:3)
用逗号分隔的列表应不存储在字符串中。关系数据库不应该这样工作。原因很多。您的数据应该有一个ticketTags
表,每个票证和每个标签一行。
有时候,我们真的非常,非常非常糟糕的设计决策与其他人纠缠在一起。您可以为此使用like
:
select u.Id, u.Name, t.submitter_id,
count(*) as numberOfTickets
from Users u join
Tickets t
on t.submitter_id = u.Id
where t.created_at between '2017-11-01' and '2018-08-23' and
',' + t.tags + ',' like '%,' + 'lwr_tickets' + ',%'
group by u.Id, u.Name, t.submitter_id;
注意:
where
在from
之后并在group by
之前。