Sql 从数据库中的多个结果中选择一个

Sql 从数据库中的多个结果中选择一个,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,问题: 通过在不同的表上应用多个联接,我正在从sql server填充asp.net报表。它可以工作,但会产生一个问题,我通过手机号来选择警察局的名称。问题是1个手机号可以是多个警察局的,所以它会选择每个警察局的名称,并显示在报告中。我只想要一个警察局的名字,我需要从警察局表 查询: SELECT [ID] ,LEFT(REPLACE(convert(varchar, CmsSMSDb.dbo.SendMessages.SendingDateTime, 113), ' ','/'),

问题: 通过在不同的表上应用多个联接,我正在从sql server填充asp.net报表。它可以工作,但会产生一个问题,我通过手机号来选择警察局的名称。问题是1个手机号可以是多个警察局的,所以它会选择每个警察局的名称,并显示在报告中。我只想要一个警察局的名字,我需要从警察局表

查询:

SELECT [ID]
      ,LEFT(REPLACE(convert(varchar, CmsSMSDb.dbo.SendMessages.SendingDateTime, 113), ' ','/'), 11) + ' ' +
       RIGHT(REPLACE(convert(varchar, CmsSMSDb.dbo.SendMessages.SendingDateTime, 113), ' ','/'), 12)
      as SendingDateTime
      ,[ToMobileNo]
      ,[Message]
      ,Designations.Name as [ToDesignation]
      FROM [CmsSMSDb].[dbo].[SendMessages] 
      inner join 
      CPOCMS.dbo.Designations
      ON CPOCMS.dbo.Designations.MobileNo = CmsSMSDb.dbo.SendMessages.ToMobileNo
      where Convert(date,CmsSMSDb.dbo.SendMessages.SendingDateTime)>= @DateFrom 
      AND 
      Convert(date,CmsSMSDb.dbo.SendMessages.SendingDateTime)<= @DateTo


      Union All

      SELECT [ID]
      ,LEFT(REPLACE(convert(varchar, CmsSMSDb.dbo.SendMessages.SendingDateTime, 113), ' ','/'), 11) + ' ' +
       RIGHT(REPLACE(convert(varchar, CmsSMSDb.dbo.SendMessages.SendingDateTime, 113), ' ','/'), 12)
      as SendingDateTime
      ,[ToMobileNo]
      ,[Message]
      ,'SDpo'+' '+CPOCMS.dbo.PoliceStations.PsName as [ToDesignation]
      From [CmsSMSDb].[dbo].[SendMessages] 
      inner join CPOCMS.dbo.PoliceStations
      ON CPOCMS.dbo.PoliceStations.sDpo_ContactNo = SendMessages.ToMobileNo
      where Convert(date,CmsSMSDb.dbo.SendMessages.SendingDateTime)>= @DateFrom 
      AND 
      Convert(date,CmsSMSDb.dbo.SendMessages.SendingDateTime)<= @DateTo
      order by SendMessages.ID
数据库结构:


只需像这样使用TOP子句

SELECT TOP 1 ColumnA,
       ...,
...
...
..

除了联系号码,还有其他列你需要考虑的,如果不是,你可以简单地采取前1名。或者如果你需要一个随机的,那么你可能需要添加一个随机选择逻辑。没有其他的,我已经尝试了很多,但找不到任何方法将你的输出存储在临时表中,并获得它的前1。或者只需在您的选择中添加前1名