2016-05-30 2 views
0

Мы пытаемся заменить вывод определенных элементов в столбцах, чтобы сократить их (то есть информационное занятие на информационную сессию). С помощью нашего текущего SQL функция замены, похоже, не позволяет оператору работать в нашей среде. Признаюсь, я новичок в использовании функции replace и не уверен, что он используется правильно. Пожалуйста, порекомендуйте!Замена SQL с помощью псевдонимов

select [Date], [Time], [Event], [Students], [Guests] 
from (
select 
    e.[id], 
    format(e.[date], 'h:mm tt') as [Time], 
    e.[date], 
    replace('Information Session','Information','Info') e.[summary] as [Event], 
    (
    select count(*) 
    from [event.registration] 
    where [event] = e.[id] and [cancelled] is null 
    ) as [Students], 
    (
    select sum([guests]) 
    from [event.registration] 
    where [event] = e.[id] and [cancelled] is null 
) as [Guests] 
from [event] e 
where e.[category] 
in ('Campus Visit', 'Information Session', 'Campus Tour', 'Athletics and Wellness Tour') and format(e.[date], 'MM/dd/yyyy') = format(getdate(), 'MM/dd/yyyy') 

) base 
order by [Time] asc 
+0

ну, что вы хотите сделать, поскольку 'replace ('Information Session', 'Information', 'Info') e. [Summary]' вообще не объясняет, каков ваш желаемый результат – Lamak

+0

Прямо сейчас вывод будет отображаться «Информационная сессия», мы хотели бы сократить ее до «Инфо-сессии», чтобы отобразить – user3490756

+5

. Затем используйте 'REPLACE (e. [Summary], 'Information', 'Info')' – Lamak

ответ

0

Весь запрос выглядит немного странным для меня. Для строки ewach, которую вы возвращаете, вы делаете 2 дополнительных запроса к таблице регистрации, счету (*) и сумме (гости).

Возможно, это не проблема, но для больших таблиц вы получите проблемы с производительностью и возможные блокировки таблиц.

Я предлагаю уборка это немного напоминает:

SELECT 
    e.[date], 
    FORMAT(e.[date], 'h:mm tt') AS [Time], 
    REPLACE(e.[category],'Information','Info') AS [Event], 
    COUNT(er.id) as [Students], 
    SUM(er.[guests]) 
FROM [event] e 
LEFT JOIN [event.registration] er 
ON er.[event] = e.[id] AND [cancelled] IS NOT NULL 
WHERE 
    e.[category] IN ('Campus Visit', 'Information Session', 'Campus Tour', 'Athletics and Wellness Tour') 
    AND DATEDIFF(DAY,e.[date], GETDATE())=0 

ORDER BY [Time] ASC 

Я также заменить ваш КУДА формат (е [дата], 'MM/DD/YYYY'.) ... к DateDiff для менее операций в запросе.

В этом могут быть некоторые ошибки, но поскольку у меня нет доступа к определениям таблиц, их трудно проверить.

+0

Спасибо за предложение! – user3490756

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