求精妙SQL 语句

咳嗽哥 2010-06-09 12:49:25
原数据

合同号码 省 市 县
H2010000001 贵州省 黔东南苗族侗族自治州 黄平县
H2010000001 贵州省 黔东南苗族侗族自治州 施秉县
H2010000012 新疆维吾尔自治区 阿克苏地区 库车县
H2010000012 新疆维吾尔自治区 阿克苏地区 新和县


想要的结果
合同号码 地址
H2010000001 贵州省黔东南苗族侗族自治州黄平县,施秉县
H2010000012 新疆维吾尔自治区阿克苏地区库车县,新和县


语句怎么写
select *
from
(
select distinct 合同号码,目的站=stuff(
(select ','+省+ 市+ 县
from v_comparea_htlb
where 合同号码=t.合同号码
for xml path('')),1,1,'')
from v_comparea_htlb t
) t


合同号码 地址
H2010000001 贵州省黔东南苗族侗族自治州黄平县,贵州省黔东南苗族侗族自治州施秉县
H2010000012 新疆维吾尔自治区阿克苏地区库车县,新疆维吾尔自治区阿克苏地区新和县
...全文
63 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-06-09
  • 打赏
  • 举报
回复
select distinct 合同号码,目的站=省+市+stuff(
(select ',' +县
from tb
where 合同号码=t.合同号码
for xml path('')),1,1,'')
from tb t

这个只能针对当前的数据
GOODlivelife 2010-06-09
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([合同号码] varchar(11),[省] varchar(16),[市] varchar(20),[县] varchar(6))
insert [tb]
select 'H2010000001','贵州省','黔东南苗族侗族自治州','黄平县' union all
select 'H2010000001','贵州省','黔东南苗族侗族自治州','施秉县' union all
select 'H2010000012','新疆维吾尔自治区','阿克苏地区','库车县' union all
select 'H2010000012','新疆维吾尔自治区','阿克苏地区','新和县'
go

select 合同号码,目的站=省+市+stuff(
(select ','+ 县
from tb
where 合同号码=t.合同号码
for xml path('')),1,1,'')
from tb t
group by 合同号码,省+市

/**
合同号码 目的站
----------- ------------------------------------------------
H2010000001 贵州省黔东南苗族侗族自治州黄平县,施秉县
H2010000012 新疆维吾尔自治区阿克苏地区库车县,新和县

(2 行受影响)
**/
feilniu 2010-06-09
  • 打赏
  • 举报
回复

select *
from
(
select distinct 合同号码,目的站=省+市+stuff(
(select ','+县
from v_comparea_htlb _t
where _t.合同号码=t.合同号码
for xml path('')),1,1,'')
from v_comparea_htlb t
) tmp

咳嗽哥 2010-06-09
  • 打赏
  • 举报
回复
2000是不支持这样的语句的
咳嗽哥 2010-06-09
  • 打赏
  • 举报
回复
四楼的最经典 要得就是这种效果
永生天地 2010-06-09
  • 打赏
  • 举报
回复
如果相同的省有很多不同的市是否应该这样
if object_id('tb') is not null drop table tb
go
create table tb (合同号码 varchar(20),省 varchar(20), 市 varchar(50), 县 varchar(10))
insert tb
select 'H2010000001', '贵州省', '黔东南苗族侗族自治州', '黄平县' union all
select 'H2010000001','贵州省', '黔东南苗族侗族自治州' ,'施秉县' union all
select 'H2010000001', '贵州省', '阿克苏地区', '库车县' union all
select 'H2010000001', '贵州省', '阿克苏地区', '新和县'


with t1 as
(
select distinct 合同号码,省 ,市, 县=stuff(
(select ',' +县
from tb
where 合同号码=t.合同号码 and 省=t.省 and 市=t.市
for xml path('')),1,1,'')
from tb t
),t2 as
(
select distinct 合同号码,省 ,市=stuff(
(select ';' +市+县
from t1
where 合同号码=t.合同号码 and 省=t.省
for xml path('')),1,1,'')
from t1 t
)
select 合同号码,目的站=省+市 from t2

/*
合同号码 目的站
-------------------- ----------------------------------------------------------------
H2010000001 贵州省阿克苏地区库车县,新和县;黔东南苗族侗族自治州黄平县,施秉县

(所影响的行数为 1 行)


*/

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧