tsql join 没有拉出正确的行
tsql join not pulling correct rows
我一直在努力解决这个问题,但遇到了障碍,希望有人能提供帮助。
我有两个 table service_calls 和 service_code_description。
service_calls 包含 service_codes,对于每个服务调用,service_code_reported 和 service_code_actual。
两者都符合 service_code 和 service_code_description table.
中的描述
这是我的问题所在,我只能提取一个描述,不能同时提取两个。
下面是我在 SQL Report Builder 中使用的代码示例。
SELECT SC.[system_code]
,SC.[node_id]
,SC.[service_call_num]
,SC.[subs_acct_num]
,SC.[drop_address]
,SC.[city_code]
,SC.[province_code]
,SC.[head_end]
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ d.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ d.service_code_description) [service_code_actual1]
,SC.[service_code_actual2]
,SC.[service_code_actual3]
,SC.[service_code_actual4]
,SC.[completed_date]
,SC.[startdate]
,SC.[enddate]
FROM
[SC_Data] SC
INNER JOIN [lkup_Service_Code_Definition] d
ON
sc.system_code = d.system_code
WHERE
year(startdate)=@year
and
month(startdate)=@month
and
node_id=@node_id
输出如下。
它应该输出的是
报告的服务代码
004 完全中断-所有服务
服务代码实际 1
131 已取消电话上门服务
如果有人在正确的方向上有任何提示,我将非常乐意提供反馈。
我认为这可能有效;
SELECT SC.[system_code]
,SC.[node_id]
,SC.[service_call_num]
,SC.[subs_acct_num]
,SC.[drop_address]
,SC.[city_code]
,SC.[province_code]
,SC.[head_end]
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ d.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ e.service_code_description) [service_code_actual1]
,SC.[service_code_actual2]
,SC.[service_code_actual3]
,SC.[service_code_actual4]
,SC.[completed_date]
,SC.[startdate]
,SC.[enddate]
FROM
[SC_Data] SC, [lkup_Service_Code_Definition] d,[lkup_Service_Code_Definition] e
WHERE
d.system_code = SC.service_code_reported
and
e.system_code = SC.service_code_actual1
and
year(startdate)=@year
and
month(startdate)=@month
and
node_id=@node_id
没有看到任何其他内容,就好像您对报告的和实际的动态列使用了相同的 service_code_description 来源 (d.service_code_description)。您将加入 sc.system_code = d.system_code 上的 lkup_Service_Code_Definition 集,但是在您的 reported/actual 动态字段中您引用的是 service_code_reported 和 service_code_actual1 值(而不是 system_code (s))。
我会冒险猜测您需要加入 lkup_Service_Code_Definition 两次 - 一次用于报告的代码,一次用于实际(尽管这假定值在service_code_reported 和 service_code_actual1 字段应映射到该集合的 system_code 值),类似于:
select ...
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ rd.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ ad.service_code_description) [service_code_actual1]
....
from SC_Data sc
join lkup_Service_Code_Definition rd
on sc.service_code_reported = rd.system_code
join lkup_Service_Code_Definition ad
on sc.service_code_actual1 = ad.system_code
where ...
我一直在努力解决这个问题,但遇到了障碍,希望有人能提供帮助。
我有两个 table service_calls 和 service_code_description。
service_calls 包含 service_codes,对于每个服务调用,service_code_reported 和 service_code_actual。 两者都符合 service_code 和 service_code_description table.
中的描述这是我的问题所在,我只能提取一个描述,不能同时提取两个。 下面是我在 SQL Report Builder 中使用的代码示例。
SELECT SC.[system_code]
,SC.[node_id]
,SC.[service_call_num]
,SC.[subs_acct_num]
,SC.[drop_address]
,SC.[city_code]
,SC.[province_code]
,SC.[head_end]
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ d.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ d.service_code_description) [service_code_actual1]
,SC.[service_code_actual2]
,SC.[service_code_actual3]
,SC.[service_code_actual4]
,SC.[completed_date]
,SC.[startdate]
,SC.[enddate]
FROM
[SC_Data] SC
INNER JOIN [lkup_Service_Code_Definition] d
ON
sc.system_code = d.system_code
WHERE
year(startdate)=@year
and
month(startdate)=@month
and
node_id=@node_id
输出如下。
它应该输出的是 报告的服务代码 004 完全中断-所有服务
服务代码实际 1 131 已取消电话上门服务
如果有人在正确的方向上有任何提示,我将非常乐意提供反馈。
我认为这可能有效;
SELECT SC.[system_code]
,SC.[node_id]
,SC.[service_call_num]
,SC.[subs_acct_num]
,SC.[drop_address]
,SC.[city_code]
,SC.[province_code]
,SC.[head_end]
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ d.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ e.service_code_description) [service_code_actual1]
,SC.[service_code_actual2]
,SC.[service_code_actual3]
,SC.[service_code_actual4]
,SC.[completed_date]
,SC.[startdate]
,SC.[enddate]
FROM
[SC_Data] SC, [lkup_Service_Code_Definition] d,[lkup_Service_Code_Definition] e
WHERE
d.system_code = SC.service_code_reported
and
e.system_code = SC.service_code_actual1
and
year(startdate)=@year
and
month(startdate)=@month
and
node_id=@node_id
没有看到任何其他内容,就好像您对报告的和实际的动态列使用了相同的 service_code_description 来源 (d.service_code_description)。您将加入 sc.system_code = d.system_code 上的 lkup_Service_Code_Definition 集,但是在您的 reported/actual 动态字段中您引用的是 service_code_reported 和 service_code_actual1 值(而不是 system_code (s))。
我会冒险猜测您需要加入 lkup_Service_Code_Definition 两次 - 一次用于报告的代码,一次用于实际(尽管这假定值在service_code_reported 和 service_code_actual1 字段应映射到该集合的 system_code 值),类似于:
select ...
,(cast(SC.[service_code_reported] as varchar(4)) +char(10)+ rd.service_code_description) [service_code_reported]
,(cast(SC.[service_code_actual1] as varchar(4)) +char(10)+ ad.service_code_description) [service_code_actual1]
....
from SC_Data sc
join lkup_Service_Code_Definition rd
on sc.service_code_reported = rd.system_code
join lkup_Service_Code_Definition ad
on sc.service_code_actual1 = ad.system_code
where ...