Как можно объединить поле (имя пользователя) в таблице подсчетов с таблицей учеников, где имя пользователя является частью строки в поле? - PullRequest
0 голосов
/ 14 ноября 2011

Таблица значений содержит: «trwal141» в качестве имени пользователя Таблица ученика имеет: «cn = trwal141, ou = студенты, ou = cs, o = dvusd» как dn

Мне нужно присоединиться к Counts.username [как или в] Student.dn, чтобы найти имя и фамилию пользователя. Какие-либо предложения. Я не получаю ничего на работу.

Вот как я присоединился к штатному расписанию:

SELECT st.last, st.first, ct.Document, ct.PageCount, ct.Date, ct.DeviceID
FROM printer_stats.Counts ct
RIGHT JOIN dv.staff st on st.username = ct.username
WHERE ct.DATE >= "2011-10-30" and ct.DeviceID >0 
ORDER BY ct.DeviceID, st.last, st.first

1 Ответ

0 голосов
/ 14 ноября 2011

Исправлено: + 3 на 2-м хариндексе был неверным (чертовски скопировать и вставить)

SELECT st.last, st.first, ct.Document, ct.PageCount, ct.Date, ct.DeviceID
FROM printer_stats.Counts ct
RIGHT JOIN dv.staff st on 
    substring(st.username,
    charindex('cn=',st.username,1)+3,
    charindex(',ou=',st.username,1)-charindex('cn='st.username,1)) = ct.username
WHERE ct.DATE >= "2011-10-30" and ct.DeviceID >0 
ORDER BY ct.DeviceID, st.last, st.first

Предполагается, что CN = обозначает начало ученика Предполагается, что ou = всегда будет следовать ID пользователя

Мне нужно сделать это в ORACLE и перевести на SQL-сервер, но вот код в Oracle, который, как я знаю, работает: D

Выберите substr ('cn = trwal141, ou = студентов, ou = cs, o = dvusd', Instr ( 'сп = trwal141, НУ = студенты, НУ = Cs, о = dvusd', 'сп =', 1) +3, instr ('cn = trwal141, ou = студенты, ou = cs, o = dvusd' ', ou =', 1) - Instr ( 'сп = trwal141, НУ = студенты, НУ = Cs, о = dvusd', 'сп =', 1)) ОТ ДВОЙНОГО;

oracle substr = SQL 2008 SUBSTRING

oracle instr = SQl 2008 charindex

Что в основном делает вышеупомянутое:

разбирает "поле st.username", находит первый экземпляр cn = и первый экземпляр, ou =, получает символы между ними и обрабатывает их как критерии соединения С точки зрения производительности, вы действительно должны разделять данные; даже если это процедура, которую вы запускаете, чтобы заполнить временную таблицу, прежде чем начинать этот тип запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...