2008-09-18 73 views
0

我試圖運行這個SQL使用獲取外部。在excel中命名列複雜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')) 
+0

B.A.錘子,你使用子查詢的原因是什麼,你確定它確實需要嗎? – Brettski 2008-09-18 02:08:03

回答

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列命名,因爲它沒有名稱。我也試圖遵守你如何進行加入的慣例。有幾件事情,我會做這個查詢不同,使其更具可讀性,但我只專注於擺脫子查詢問題。

我沒有這樣做,但我會建議您使用從中獲得它們的表格來限定所有列。

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),它只是使事情易於理解。我沒有在我的例子中,因爲我很確定哪些列與哪些表一致。請讓我知道,如果這不適合你,它返回的數據是錯誤的。這將使得在需要時更容易解決。