SQL要从同一个字段中取两次数据,分两列显示

little_ge 2016-04-22 05:16:34
在一个表中有 ‘名称’,‘编号’,‘id’,其中不同的标号对应不同的名称类型,比如编号=‘A018'表示行政区域名称,有北京上海这些,编号=’A019‘ 表示建设状态,有建设中,完成等状态,现在我想查询 行政区域、建设状态,分两列显示,SQL语句该怎么写啊?
...全文
1860 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-04-25
  • 打赏
  • 举报
回复
按照你的描述你这是是行转列问题?按照我的理解还有一个问题,比如,如果有下面的数据存在多个A018和A019,哪个A018和A019对应呢?已改还有一个字段来配对,假如是no

;with tb(Code,[Name],no) as (
   select 'A019',N'建设中',1 union all
   select 'A018',N'北京',2 union all
      select 'A019',N'完成',3 union all
   select 'A018',N'上海',4 
)
select * from tb
/*
Code	Name	no
A019	建设中	1
A018	北京	2
A019	完成	3
A018	上海	4
*/


;with tb(Code,[Name],no) as (
   select 'A019',N'建设中',1 union all
   select 'A018',N'北京',1 union all
      select 'A019',N'完成',2 union all
   select 'A018',N'上海',2
)
select no,max(case when code='A018' then [Name] else '' end) as city,max(case when code='A019' then [name] else '' end) as status from tb
group by no
/*no	city	status
1	北京	建设中
2	上海	完成
*/
  • 打赏
  • 举报
回复
引用 4 楼 u012386278 的回复:
[quote=引用 2 楼 kingtiy 的回复:] SELECT * FROM ( select IIF( 编号='A018' , 名称 ,null) as 行政区域名称, IIF( 编号='A019' , 名称,NULL) as 建设状态, from tb )t
在navicat上运行直接报错。。。[/quote] 你贴出表的结构,还有具体的数据,不然不好帮你
little_ge 2016-04-23
  • 打赏
  • 举报
回复
引用 2 楼 kingtiy 的回复:
SELECT * FROM ( select IIF( 编号='A018' , 名称 ,null) as 行政区域名称, IIF( 编号='A019' , 名称,NULL) as 建设状态, from tb )t
在navicat上运行直接报错。。。
little_ge 2016-04-23
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
try this:


select case when 编号='A018' then 名称 end as 行政区域名称,
       case when 编号='A019' then 名称 end as 建设状态,
       *
from tb
试过了 不对啊 取出来很多NULL值 而且建设状态显示的是北京上海这些地区名字
kingtiy 2016-04-22
  • 打赏
  • 举报
回复
SELECT * FROM ( select IIF( 编号='A018' , 名称 ,null) as 行政区域名称, IIF( 编号='A019' , 名称,NULL) as 建设状态, from tb )t
  • 打赏
  • 举报
回复
try this:


select case when 编号='A018' then 名称 end as 行政区域名称,
       case when 编号='A019' then 名称 end as 建设状态,
       *
from tb

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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