2014-07-11 107 views
1

我有两个查询,它们的结果集合在一起使用UNION。基于MAX()筛选列结果

我想根据FilterColumn的MAX()过滤出行,但我无法弄清楚如何做到这一点。

+-----------------+----------+--------------+ 
| PropDescription | PropCode | FilterColumn | 
+-----------------+----------+--------------+ 
| 476SADDR1  | Finland |   2 | 
| 477SADDR1  | Sweden |   2 | 
| 1SADDR1   | 2038  |   1 | 
| 2SADDR1   | 2030  |   1 | 
| 3SADDR1   | 15  |   1 | 
| 4SADDR1   | 00000002 |   1 | 
| 6SADDR1   | 500  |   1 | 
| 8SADDR1   | 556  |   1 | 
| 9SADDR1   | 821  |   1 | 
+-----------------+----------+--------------+ 

SELECT 
    PropDescription 
    , PropCode 
    , FilterColumn 
FROM 
    (SELECT DISTINCT 
     CASE 
      WHEN PL.Type = 11 
       THEN PL.ADDR 
      ELSE P.ADDR 
      END AS N'PropDescription' 
     ,CASE 
      WHEN PL.TYPE = 3 
       THEN P.CODE 
      ELSE LPA.Value 
      END AS N'PropCode' 
     , 2 AS FilterColumn 
    FROM PROPERTY PL 
    INNER JOIN PROPLIST LP2 ON PL.ID = LP2.PropList 
    INNER JOIN PROPERTY P ON LP2.Property = P.ID 
    INNER JOIN PropAttribute LPA ON LPA.PropList = PL.ID 
    WHERE 1 = 1 
     AND PL.ID IN (SELECT Property from PROPLIST where PropList IN (47,46)) 
     AND P.TYPE = 3 

    UNION ALL 

    SELECT DISTINCT 
     CASE 
      WHEN PL.Type = 11 
       THEN PL.ADDR 
      ELSE P.ADDR 
      END AS N'PropDescription' 
     ,CASE 
      WHEN PL.TYPE = 3 
       THEN P.CODE 
      ELSE LPA.Value 
      END AS N'PropCode' 
     , 1 AS FilterColumn 
    FROM PROPERTY PL 
    INNER JOIN PROPLIST LP2 ON PL.ID = LP2.PropList 
    INNER JOIN PROPERTY P ON LP2.Property = P.ID 
    LEFT JOIN PropAttribute LPA ON LPA.PropList = PL.ID 
    WHERE 1 = 1 
    AND PL.ID IN (SELECT Property from PROPLIST where PropList IN (1,2,3,4)) 
    AND PL.TYPE = 3 
    ) AS ResultSet 

我知道这很简单,但我现在不能弄明白。

预期成果是:

+-----------------+----------+--------------+ 
| PropDescription | PropCode | FilterColumn | 
+-----------------+----------+--------------+ 
| 476SADDR1  | Finland |   2 | 
| 477SADDR1  | Sweden |   2 | 
+-----------------+----------+--------------+ 
+0

所以将你的预期产出的样子,根据样本数据您提供什么? –

+0

嗯,从我读我很想念你怎么想的过滤器对FilterColumn工作附加条件....直到现在我明白这 选择 PropDescription ,PropCode ,FilterColumn FROM (YourSubQuery) GROUP通过PropDescription,PropCode HAVING FilterColumn = MAX(FilterColumn) –

+0

@ shree.pat18更新我的问题与预期的输出。 –

回答

3

试试这个:

;with cte as 
(--Your union), 

filtered as 
(*, rank() over (order by filtercolumn desc) rank from cte) 

select * from filtered 
where rank = 1 
+1

是的,排名..就是这样!我知道我之前使用过一些东西,但不记得是什么。 –

+0

@RaduGheorghiu不用担心,我们都会被这些事情困扰! –