子查询,在一个查询中连接

时间:2017-09-30 10:42:56

标签: sql sql-server sql-server-2005 subquery inner-join

我有五张桌子。我需要从所有这些数据中获取数据。表'Tenancy_histories'包含move_in_date,move_out_date,rent列。 “配置文件”包含first_name,last_name,email,profile_id等。“引用”包含referrer_bonus_amount和类似的其他数据。最重要的是,它包含特定profile_id所引用的引用数,该profile_id是'referrer_id(与profile id相同)列中该profile_id的出现次数。 'Employment_details'包含最新雇主,职业类别

我需要写一个查询来显示个人资料ID,全名,电话,电子邮件ID,城市,房屋ID,move_in_date,move_out日期,租金,转介总数,最新雇主和所有租户的职业类别在2015年1月至2016年1月的某个特定城市按其租金按降序排序 试过这样的事情:

select pr.first_name+' '+pr.last_name as full_name, 
       pr.email, 
       pr.phone, 
       pr.profile_id, 
       th.house_id, 
       th.move_in_date, 
       th.move_out_date, 
       th.rent, 
       ed.latest_employer, 
       ed.Occupational_category,  
       ref.cnt 
  from Profiles pr,
       Tenancy_histories th, 
       Employment_details ed 
       INNER JOIN (select [referrer_id(same as profile id)], 
                     count([referrer_id(same as profile id)]) as cnt 
                   from Referrals 
                 group by [referrer_id(same as profile id)]) as ref 
      on pr.profile_id = ref.[referrer_id(same as profile id)] 
where pr.profile_id = th.profile_id 
  and th.profile_id = ed.profile_id 
  and pr.profile_id IN 
       (select profile_id 
          from Tenancy_histories 
         where move_in_date >= convert(date, 'Jan 2015') 
           and move_out_date <= convert(date, 'Jan 2016')) 

获取错误:

无法绑定多部分标识符“pr.profile_id”。内连接部分出了问题。也许INNER JOIN不是检索数据的正确方法

1 个答案:

答案 0 :(得分:1)

这就是你想要的:

SELECT pr.first_name+' '+pr.last_name as full_name, 
       pr.email, 
       pr.phone, 
       pr.profile_id, 
       th.house_id, 
       th.move_in_date, 
       th.move_out_date, 
       th.rent, 
       ed.latest_employer, 
       ed.Occupational_category,  
       count(ref.profile_id) 
FROM Profiles pr
INNER JOIN Tenancy_histories th ON (pr.profile_id = th.profile_id AND move_in_date >= convert(date, 'Jan 2015') AND move_out_date <= convert(date, 'Jan 2016'))
INNER JOIN Employment_details ed ON (th.profile_id = ed.profile_id)
LEFT JOIN Referrals as ref ON (pr.profile_id = ref.profile_id)
GROUP BY pr.first_name+' '+pr.last_name, 
       pr.email, 
       pr.phone, 
       pr.profile_id, 
       th.house_id, 
       th.move_in_date, 
       th.move_out_date, 
       th.rent, 
       ed.latest_employer, 
       ed.Occupational_category

注意:您不应该使用convert(date, 'Jan 2015'),而应使用类似convert(date,'20150101',112)的内容,因为它可以在服务器上运行,并在另一个服务器上引发错误...搜索“datetime隐式转换”关于此的更多细节。