Sql server 如何从SQL server获取数据到CityID和CityID库

Sql server 如何从SQL server获取数据到CityID和CityID库,sql-server,sql-server-2012,sql-server-2014,Sql Server,Sql Server 2012,Sql Server 2014,我有下面的查询,我想显示来自CityID的数据,到CityID的数据。假设乘客旅行从城市伦敦到城市曼彻斯特。如何编写这样的查询,当我在中使用where子句和时,它在fromcity和tocity中显示相同的值 预期结果如下图所示 Select vh.VoucharId,fCity.CityName as FromCity, tCity.CityName as ToCity, InDate from VoucharHotel vh inner join City fCit

我有下面的查询,我想显示来自CityID的数据
到CityID的数据
。假设乘客旅行
从城市
伦敦
到城市
曼彻斯特。如何编写这样的查询,当我在
中使用
where
子句和
时,它在
fromcity
tocity
中显示相同的值

预期结果如下图所示

  Select vh.VoucharId,fCity.CityName as FromCity, tCity.CityName as ToCity, InDate 
    from VoucharHotel vh  
    inner join City fCity on   vh.City = fCity.CityId  inner join City tCity on
     vh.City = tCity.CityId 
     where vh.InDate  between '11/15/2018 12:00:00 AM' and '11/16/2018 12:00:00 AM'   AND City in (1,2)


以下选项是否可以解决您的问题:

with cte
(VoucherID,FromCity,ToCity,InDate)
as
(
select
    vh.VoucharId
,   fCity.CityName as FromCity
,   tCity.CityName as ToCity
,   InDate
from        VoucharHotel    vh
inner join  City            fCity on    vh.City = fCity.CityId
inner join  City            tCity on    vh.City = tCity.CityId 
where       vh.InDate  between '11/15/2018 12:00:00 AM' and '11/16/2018 12:00:00 AM'
)

select
*
from    cte
where   City in (1,2)

如果您需要更改,请告诉我。

where Clause中的城市无效,当我运行没有where Clause的查询时,它会显示错误的结果。如果您能提供一些示例数据,我将能够更改答案以满足您的需要。好的,等4分钟谢谢,我想我找到了问题。你用他们的身份加入城市,让他们变得一样。为了解决这个问题,我建议您在每个表中添加一个乘客ID列,然后将它们连接在一起,这将得到预期的结果。我也可以为您做,除非您想快速更改示例数据,否则我将为您提供脚本。。。
with cte
(VoucherID,FromCity,ToCity,InDate)
as
(
select
    vh.VoucharId
,   fCity.CityName as FromCity
,   tCity.CityName as ToCity
,   InDate
from        VoucharHotel    vh
inner join  City            fCity on    vh.City = fCity.CityId
inner join  City            tCity on    vh.City = tCity.CityId 
where       vh.InDate  between '11/15/2018 12:00:00 AM' and '11/16/2018 12:00:00 AM'
)

select
*
from    cte
where   City in (1,2)