如果您不能在 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
这是我的代码
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