ID 类型 名称
1 A name1
2 B name2
3 A name3
4 B name4
.......
想要一个查询,得到下面的结果:
类型 名称 根 ID
A YES
name1 NO 1
name3 NO 3
B YES
name2 NO 2
name4 NO 4
......
谢谢
...全文
40014打赏收藏
请教一个查询语句
Access 有表A,内容如下: ID 类型 名称 1 A name1 2 B name2 3 A name3 4 B name4 ....... 想要一个查询,得到下面的结果: 类型 名称 根 ID A YES name1 NO 1 name3 NO 3 B YES name2 NO 2 name4 NO 4 ...... 谢谢
create table A(ID int, 类型 varchar(10), 名称 varchar(15))
insert A select 1, 'A', 'name1'
union all select 2, 'B', 'name2'
union all select 3, 'A', 'name3'
union all select 4, 'B', 'name4'
--总是最牛的
select isnull(b.类型,'')类型,isnull(a.名称,'')名称,
(case when b.类型 is not null then 'YES' else 'NO' end)根,
isnull(RTRIM (cast(a.id as char(5))),'')ID
from a full join (select 类型,ID=0 from a group by 类型)b on a.ID=b.ID
order by isnull(b.类型,a.类型),isnull(b.id,a.id)
/*
类型 名称 根 ID
A YES
name1 NO 1
name3 NO 3
B YES
name2 NO 2
name4 NO 4
*/
环境:
create table #temp
(ID int,
类型 varchar(10),
名称 varchar(50)
)
insert into #temp
select '1','A','name1' union all select '2','B','name2' union all select '3','A','name3' union all select '4','B','name4'
select * from #temp
方法1:
select 类型,名称,根,isnull(cast(ID as varchar(10)),'' ) ID from
(
select distinct 类型,'' 名称,'YES' 根,null ID from 表
union all
select 类型,名称,'NO' 根,ID from 表
)y
order by 类型,名称
----------------------------
类型 名称 根 ID
A YES
A name1 NO 1
A name3 NO 3
B YES
A name2 NO 2
A name4 NO 4
这样没有解决类型相应的空值
方法2:(这个办法比较笨,但是能得到正确结果)
<step 1>--建立一个有新建的自增ID列的表#tt
select identity(int,1,1) as idid ,* into #tt from
(
select top 100 percent 类型,名称,根,isnull(cast(ID as varchar(10)),'' ) ID from
(
select distinct 类型,'' 名称,'YES' 根,null ID from #temp
union all
select 类型,名称,'NO' 根,ID from #temp
)y
order by 类型,名称
)t
<step2>--从#tt里查询结果
select 类型,名称,根,ID from
(
select idid,'' 类型,名称,根,ID from #tt where 名称<>''
union all
select idid,类型,名称,根,ID from #tt where 名称=''
) x
order by idid
------
类型 名称 根 ID
A YES
name1 NO 1
name3 NO 3
B YES
name2 NO 2
name4 NO 4
SELECT 类型名,名称,根,ID FROM (
SELECT distinct 类型,'' as 名称,'YES' as 根,null as ID,类型 as 排序 from A
UNION ALL
select '' as 类型,名称,'NO' as 根,ID,类型 as 排序 from A
)
ORDER BY 排序,ID
select 类型名,名称,根,id from (
SELECT distinct 类型 as 类型名,'' as 名称,'yes' as 根,null as ID,类型 as 排序 from 表a
union all
select '' as 类型名,名称,'no' as 根,id,类型 as 排序 from 表a
)
order by 排序,id
create table #temp
(ID int,
类型 varchar(10),
名称 varchar(50)
)
insert into #temp
select '1','A','name1' union all select '2','B','name2' union all select '3','A','name3' union all select '4','B','name4'
select * from #temp
select 类型,名称,根,isnull(cast(ID as varchar(10)),'' ) ID from
(
select distinct 类型,'' 名称,'YES' 根,null ID from 表
union all
select 类型,名称,'NO' 根,ID from 表
)y
order by 类型,名称