sql查询只从多行中选择一行

时间:2013-11-07 22:55:53

标签: sql sql-server-2008 tsql

我有这个问题:

SELECT p.[PostingID]
      ,[EmployerID]
      ,[JobTitle]                  
      ,pin.[IndustryID]         
FROM [Posting] p
INNER JOIN [City] c
  ON p.CityID = c.CityID
LEFT OUTER JOIN PostingIndustry pin
  ON p.PostingID = pin.PostingID
WHERE (c.CityID = @CityId OR @CityId IS NULL) 
  AND (p.StateProvinceID = @StateProvinceId OR @StateProvinceId IS NULL) 
  AND (pin.IndustryID = @IndustryId OR @IndustryId IS NULL) 
  AND 
  (
     (p.[Description] LIKE '%' + @Keyword + '%' OR @Keyword IS NULL) 
     OR (p.[JobTitle] LIKE '%' + @Keyword + '%'  OR @Keyword IS NULL)
  ) 
  AND p.StreetAddress IS NOT NULL 
  AND p.ShowOnMap = 1

返回所有引脚的结果。[IndustryID]如果未选择IndustryId或选择了所有行业。如果只选择了一个行业,我会得到一个好的结果,但是当一个帖子包含在多个行业中时,我会得到多个结果,如下图所示:

enter image description here

因此,例如,当发生这种情况时,我想只获得该发布ID的一个结果,否则我将获得一个谷歌地图标记的多个结果,如下图所示: enter image description here

有没有办法如何优化上面的查询来做我需要的? 在此先感谢Laziale

3 个答案:

答案 0 :(得分:1)

尝试在最后使用group by子句

使用MAX(IndustryId)

然后

GROUP BY PostingId,EmployerId,Jobtitle

答案 1 :(得分:1)

如果只选择IndustryId最小的行:

SELECT [PostingID]
      ,[EmployerID]
      ,[JobTitle]                  
      ,MIN(pin.[IndustryID])         
FROM [Posting] p
INNER JOIN [City] c
  ON p.CityID = c.CityID
LEFT OUTER JOIN PostingIndustry pin
  ON p.PostingID = pin.PostingID
WHERE (c.CityID = @CityId OR @CityId IS NULL) 
  AND (p.StateProvinceID = @StateProvinceId OR @StateProvinceId IS NULL) 
  AND (pin.IndustryID = @IndustryId OR @IndustryId IS NULL) 
  AND 
  (
     (p.[Description] LIKE '%' + @Keyword + '%' OR @Keyword IS NULL) 
     OR (p.[JobTitle] LIKE '%' + @Keyword + '%'  OR @Keyword IS NULL)
  ) 
  AND p.StreetAddress IS NOT NULL 
  AND p.ShowOnMap = 1
GROUP BY [PostingID],[EmployerID],[JobTitle] 

每当你只有一个时,它会返回那个,当你有多个时它只返回一个具有最小的IndustryId的那个。

答案 2 :(得分:1)

请勿选择行业ID并使用“SELECT DISTINCT ...”