0

我正在尝试使用 get external 运行此 SQL。

它可以工作,但是当我尝试重命名子查询或任何相关内容时,它会删除它。

我试过了asas名字在里面''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'))
4

2 回答 2

1

您可以摆脱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 列,因为它没有名称。我还试图保持你如何加入的惯例。我会对此查询做一些不同的事情以使其更具可读性,但我只专注于摆脱子查询问题。

我没有这样做,但我建议您使用从中获取它们的表来限定所有列。

于 2008-09-18T01:55:13.223 回答
0

要删除 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% 确定哪些列与哪些表一起使用。请让我知道这是否不适合您以及它返回的数据是如何错误的。这将使在需要时更容易解决。

于 2008-09-18T02:23:36.180 回答