Sql server 基于列的MAX()筛选联合结果

Sql server 基于列的MAX()筛选联合结果,sql-server,Sql Server,我有两个查询,它们的结果集通过一个并集组合在一起 我正在尝试根据第th filter列的MAX()筛选出行,但我不知道如何执行此操作 +-----------------+----------+--------------+ | PropDescription | PropCode | FilterColumn | +-----------------+----------+--------------+ | 476SADDR1 | Finland | 2 |

我有两个查询,它们的结果集通过一个并集组合在一起

我正在尝试根据第th filter列的
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 |
+-----------------+----------+--------------+
试试这个:

;with cte as
( --Your union),

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

select * from filtered
where rank = 1

那么,根据您提供的样本数据,您的预期输出是什么样的呢?嗯,从我所读到的内容来看,我缺少关于您希望过滤器如何在FilterColumn上工作的附加条件。。。。到目前为止,我已经理解了通过PropDescription从(您的子查询)组中选择PropDescription、PropCode、FilterColumn,PropCode的FilterColumn=MAX(FilterColumn)@shree.pat18使用预期输出更新了我的问题。@DimiToulakis使用预期输出更新了我的问题。是的,排名。。就这样!我知道我以前用过一些东西,但不记得是什么了。@RaduGheorghiu不用担心,我们都时不时地被这些东西难倒!