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 に答える