分组来自文本列的数据

时间:2013-04-20 16:14:47

标签: sql tsql group-by

我在数据库中有一个存储发票数据的表。我希望能够轻松查看某个动作发生时的每日统计数据。当执行操作时,会以这种格式将注释添加到该表中名为“notes”的列中:“ORDER FILLED -G J- Apr 20 2013”​​。 “G J”是执行我想跟踪的动作的人的姓名首字母缩写。该笔记之前和之后可以有其他笔记。不幸的是,此操作仅记录在数据库中的这一位置,我无法控制数据的记录方式。我希望创建一个每日报告,说明每个用户昨天执行此操作的次数。下面的查询工作完美但是它将每个用户的结果作为单独的结果返回,并且我将它们置于一个网格中。我不是程序员或SQL专家,我只是试图抓住一些可行的东西。是否有一种简单的方法可以修改我的查询,以便我可以有一个包含两列的表...第1列应该是“用户”而第2列应该是“订单已填充”我想为每个员工排一行,如何很多时候他们执行了这个动作,最后总共进行了一次。

declare @date VARCHAR(12)


SET @date = (SELECT CONVERT(VARCHAR(12), GETDATE()-1, 100))


select count(invoice_id) as Employee1 from invoice 
where notes like '%ORDER FILLED -G J- '+@date+'%'

select count(invoice_id) as Employee2 from invoice 
where notes like '%ORDER FILLED -S L- '+@date+'%'

select count(invoice_id) as Employee3 from invoice 
where notes like '%ORDER FILLED -E S- '+@date+'%'

select count(invoice_id) as Employee4 from invoice 
where notes like '%ORDER FILLED -R A- '+@date+'%'

select count(invoice_id) as Total from invoice 
where notes like '%ORDER FILLED -% %- '+@date+'%'

1 个答案:

答案 0 :(得分:0)

这样的事情可能会起作用

select substring(notes, 13, 4) filledby -- should be -G J- if I counted right
, count(*) records
from invoice
where notes like '% ' + @date + '%'
group by substring(notes, 13, 4)

请注意,不同的RDBMS对子字符串有不同的语法,而您没有指定自己的语法。