如果您不能在 SELECT 中使用它,如何使用 MS SQL 区分列?

How to distinct column using MS SQL if u can't use it in SELECT?

这是我的代码

 select pd.postFilial as postoffice,
        cr.number as region,
        coalesce(cd.number, cr.number) as district,
        c.number as city,
        pd.postIndex as postcode,
        pd.name as name,
        lf.reason as lock_reason
 from pn_district pd
 inner join cd_city c on c.NUMBER = pd.cityDistrict
 left join pn_lockfilial lf with (nolock) on lf.id_postfilial = pd.postFilial
 left join cd_region cd  on cd.number = c.parent_id
 left join cd_region cr on cr.number = isNull(cd.parent_id, c.parent_id)
 where YEAR(pd.datestop) = 9999;

我想使 pd.name 不同,因为没有它我会得到类似

的结果
33000000274479  600000002   500000000   1008302400458   21010   1
33000000274479  600000002   500000000   1008302400458   21010   1
33000000274479  600000002   500000000   1008302400458   21010   2
33000000274479  600000002   500000000   1008302400458   21010   2
32000100440927  600000002   500000000   1008302400458   21023   4
32000100440927  600000002   500000000   1008302400458   21023   4
32000100440927  600000002   500000000   1008302400458   21023   5
32000100440927  600000002   500000000   1008302400458   21023   5

但我需要这个版本

33000000274479  600000002   500000000   1008302400458   21010   1
33000000274479  600000002   500000000   1008302400458   21010   2
32000100440927  600000002   500000000   1008302400458   21023   4
32000100440927  600000002   500000000   1008302400458   21023   5

求助,我需要最简单的解决方案,没有任何 CTE 等... 谢谢!

对 select 语句中的所有列使用 Group by

 select pd.postFilial as postoffice,
        cr.number as region,
        coalesce(cd.number, cr.number) as district,
        c.number as city,
        pd.postIndex as postcode,
        pd.name as name,
        lf.reason as lock_reason
 from pn_district pd
 inner join cd_city c on c.NUMBER = pd.cityDistrict
 left join pn_lockfilial lf with (nolock) on lf.id_postfilial = pd.postFilial
 left join cd_region cd  on cd.number = c.parent_id
 left join cd_region cr on cr.number = isNull(cd.parent_id, c.parent_id)
 where YEAR(pd.datestop) = 9999
 group by pd.name, pd.postFilial, cr.number, coalesce(cd.number, cr.number), c.number, pd.postIndex, lf.reason
 ;

您可以按 select 的所有列分组,或使用 DISTINCT:

 select DISTINCT
        pd.postFilial as postoffice,
        cr.number as region,
        coalesce(cd.number, cr.number) as district,
        c.number as city,
        pd.postIndex as postcode,
        pd.name as name,
        lf.reason as lock_reason
 from pn_district pd
 inner join cd_city c on c.NUMBER = pd.cityDistrict
 left join pn_lockfilial lf with (nolock) on lf.id_postfilial = pd.postFilial
 left join cd_region cd  on cd.number = c.parent_id
 left join cd_region cr on cr.number = isNull(cd.parent_id, c.parent_id)
 where YEAR(pd.datestop) = 9999