2013-04-20 5 views
1

У меня есть таблица в базе данных, которая хранит данные счета. Я ищу, чтобы легко просматривать ежедневную статистику о том, когда происходит определенное действие. Когда действие выполняется, примечание добавляется в столбец «примечания» в этой таблице в этом формате: «ЗАКАЗ ЗАПОЛНИТЬ -G J - 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- '[email protected]+'%' 

select count(invoice_id) as Employee2 from invoice 
where notes like '%ORDER FILLED -S L- '[email protected]+'%' 

select count(invoice_id) as Employee3 from invoice 
where notes like '%ORDER FILLED -E S- '[email protected]+'%' 

select count(invoice_id) as Employee4 from invoice 
where notes like '%ORDER FILLED -R A- '[email protected]+'%' 

select count(invoice_id) as Total from invoice 
where notes like '%ORDER FILLED -% %- '[email protected]+'%' 
+0

Если возможно, вы должны переделать таблицу так, чтобы она находилась в [1NF] (http://en.wikipedia.org/wiki/First_normal_form): заполненная дата и заполняющий человек должны быть в их собственных столбцах. – svick

+0

спасибо за ответ, но у меня нет возможности перепроектировать таблицу или изменить каким-либо образом. Я пытаюсь создать отчет о стороннем БД, который я не контролирую. (Мне разрешено читать его, но просто не изменяйте способ его работы) – Ryan

ответ

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) 

Обратите внимание, что различные РСУБД имеют разный синтаксис для подстрок, и вы не указали ваши.

+0

Спасибо за быстрый ответ, что почти похоже на работу, но проблема, которую я вижу, заключается в том, что иногда перед этой строкой есть другие заметки текст в этой колонке, вот почему я использовал% перед запиской. Таким образом, подсчет 13 символов с самого начала не работает, есть ли способ подсчитать 13 символов, откуда начинается «% ЗАКАЗ ЗАВЕРШЕНА»? MS SQL 2012 - это БД, кстати, – Ryan

+0

Выяснил это ... просто добавил (PATINDEX ('% ORDER FILLED%', примечания)) + 13, и это делает трюк! Спасибо за помощь – Ryan

Смежные вопросы