именование столбцов в Excel с помощью Complex SQL - PullRequest
0 голосов
/ 18 сентября 2008

Я пытаюсь запустить этот SQL с помощью get external.

Это работает, но когда я пытаюсь переименовать подзапросы или что-то в этом роде, оно удаляется.

Я пробовал as, as и имя в '', as, затем имя в "" и то же самое с пространством. Как правильно это сделать?

Соответствующий SQL:

SELECT list_name, app_name, 
    (SELECT fname  + ' ' + lname  
     FROM dbo.d_agent_define map 
     WHERE map.agent_id = tac.agent_id) as agent_login, 
   input, CONVERT(varchar,DATEADD(ss,TAC_BEG_tstamp,'01/01/1970'))
FROM dbo.maps_report_list list 
JOIN dbo.report_tac_agent tac ON (tac.list_id = list.list_id)
WHERE input = 'SYS_ERR' 
   AND app_name = 'CHARLOTT'
   AND convert(VARCHAR,DATEADD(ss,day_tstamp,'01/01/1970'),101) = '09/10/2008'
   AND list_name LIKE 'NRBAD%'
ORDER BY agent_login,CONVERT(VARCHAR,DATEADD(ss,TAC_BEG_tstamp,'01/01/1970'))

Ответы [ 2 ]

1 голос
/ 18 сентября 2008

Вы можете избавиться от своего dbo.d_agent_define подзапроса и просто добавить соединение в таблицу определения агента.

Будет ли этот код работать?

select list_name, app_name, 
map.fname + ' ' + map.lname as agent_login, 
input, 
convert(varchar,dateadd(ss,TAC_BEG_tstamp,'01/01/1970')) as tac_seconds
from dbo.maps_report_list list 
join dbo.report_tac_agent tac 
on (tac.list_id = list.list_id) 
join dbo.d_agent_define map
on (map.agent_id = tac.agent_id)
where input = 'SYS_ERR' 
and app_name = 'CHARLOTT' 
and convert(varchar,dateadd(ss,day_tstamp,'01/01/1970'),101) = '09/10/2008' 
and list_name LIKE 'NRBAD%' 
order by agent_login,convert(varchar,dateadd(ss,TAC_BEG_tstamp,'01/01/1970'))

Обратите внимание, что я назвал ваш столбец dateadd, потому что у него не было имени. Я также пытался придерживаться вашего соглашения о том, как вы делаете соединение. Есть несколько вещей, которые я бы сделал по-другому с этим запросом, чтобы сделать его более читабельным, но я сосредоточился только на избавлении от проблемы подзапроса.

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

0 голосов
/ 18 сентября 2008

Чтобы удалить подзапрос в операторе SELECT, я предлагаю следующее:

SELECT list_name, app_name, map.fname + ' ' + map.lname as agent_login, input, convert(varchar,dateadd(ss, TAC_BEG_tstamp, '01/01/1970))
FROM dbo.maps_report_list inner join
  (dbo.report_tac_agent as tac inner join dbo.d_agent_define as map ON (tac.agent_id=map.agent_id)) ON list.list_id = tac.list_id
WHERE input = 'SYS_ERR' and app_name = 'CHARLOTT' and convert(varchar,dateadd(ss,day_tstamp,'01/01/1970'),101) = '09/10/2008' 
    and list_name LIKE 'NRBAD%' order by agent_login,convert(varchar,dateadd(ss,TAC_BEG_tstamp,'01/01/1970'))

Сначала я использовал скобки для создания внутреннего соединения между dbo.report_tac_agent и dbo.d_agent_define. Теперь это набор данных соединения. Комбинация этих таблиц затем объединяется с вашей таблицей списков, которая, как я предполагаю, является основной таблицей здесь. Если я понимаю, что вы пытаетесь сделать со своим дополнительным выбором, это должно работать для вас.

Как сказал другой автор, вы должны использовать имена таблиц в ваших столбцах (например, map.fname), это просто делает вещи простыми для понимания. В моем примере я этого не сделал, потому что я на 100% уверен, какие столбцы и какие таблицы идут вместе. Пожалуйста, дайте мне знать, если это не сработает для вас и как данные, которые он возвращает, неверны. Это облегчит решение проблем.

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