怎样用一个SQL语句生成这样的结果

时间:2020-12-20 10:30:52
举例 
地区   城市   订单数量 
====================
华北   北京   20
       青岛   50
东北   黑龙江  30
      大连    80
西南   昆明    20
====================
地区这一列如果下一列跟上一列地区相同,则不显示.


14 个解决方案

#1


isnull(地区,'')

#2


select 地区=case when 城市=(select top 1 城市 from tab where 地区=a.地区 order by 城市) then 地区 else '' end
,城市,订单数量
from tab a
order by 地区,城市

#3




create table tb(area varchar(10),city varchar(10),num int)

insert into tb select '华北' , '北京', 20 
insert into tb select '华北' , '青岛', 10 
insert into tb select '东北' , '黑龙江', 40 
insert into tb select '东北' , '大连', 50 
insert into tb select '西南' , '昆明', 30 




select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
                      city,num from tb T

/*
华北 北京 20
青岛 10
东北 黑龙江 40
大连 50
西南 昆明 30

*/

drop table tb

#4


create table cityInfo
(
region varchar(30),
city varchar(30),
productNum int
)
insert into cityInfo

select N'华北','北京',  20 union all 
select N'华北','青岛',  50 union all 
select N'东北','黑龙江',  30 union all 
select N'东北','大连',  80 union all 
select N'西南','昆明',  20 

select region=case when city=(select top 1 city from cityInfo 
where region=a.region ) then region else '' end
,city,productNum
from cityInfo a


结果
华北 北京 20
青岛 50
东北 黑龙江 30
大连 80
西南 昆明 20

#5


首先谢谢大家的关心,楼上几位大大的SQL语句我运行过还是不行,我发下我的表结构吧
订单ID int not null
地区   nvachar(40) null
城市   nvachar(40) null

订单数量我是count(订单ID)as'订单数量'

楼上各位大大能再帮我看看吗

#6


错误为:选择列表中的列 '订单.货主城市' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

#7


订单的数量在哪里个表.

#8


订单数量就是count(订单ID)as '订单数量'

#9


引用 3 楼 lff642 的回复:
SQL codecreatetabletb(areavarchar(10),cityvarchar(10),numint)insertintotbselect'华北','北京',20insertintotbselect'华北','青岛',10insertintotbselect'东北','黑龙江',40insertintotbselect'东北','大连',50insertintotbselect'西南','昆明',30selectcasewhencity=(selecttop1cityfromtbwherearea=T.areaorderbyarea)thenareaelse''endarea,
                      city,numfromtb T/*华北    北京    20
    青岛    10

create table tb(area varchar(10),city varchar(10),num int)

insert into tb select '华北' , '北京', 20 
insert into tb select '东北' , '黑龙江', 40 
insert into tb select '东北' , '大连', 50 
insert into tb select '西南' , '昆明', 30 
insert into tb select '华北' , '青岛', 10 


--select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
  --                    city,num from tb T
select case when city=(select top 1 city from tb where area=T.area order by area) then area else '' end area,
city,num from tb T

/*
华北    北京    20
    青岛    10
东北    黑龙江    40
    大连    50
西南    昆明    30

*/

drop table tb 这样的顺序就出错了吧!不是通法!

#10


create table tb(area varchar(10),city varchar(10),num int,areaid int)

insert into tb select '华北' , '北京', 20 ,0
insert into tb select '华北' , '青岛', 10 ,0
insert into tb select '东北' , '黑龙江', 40 ,1
insert into tb select '东北' , '大连', 50 ,1
insert into tb select '西南' , '昆明', 30 ,2
insert into tb select '华北' , '石家庄', 10 ,0


--select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
  --                    city,num from tb T
select case when city=(select top 1 city from tb where area=T.area order by area) then area else '' end area,
city,num from tb T order by areaid

/*
华北    北京    20
    青岛    10
东北    黑龙江    40
    大连    50
西南    昆明    30

*/

drop table tb

#11


还有没有高人解答啊        5555555555555      急死............

#12


DECLARE @a table
(
订单ID int not null ,
地区  nvarchar(40) null ,
城市  nvarchar(40) null 

)
insert into @a
select 1,N'华北','北京' union all 
select 2,N'华北','青岛' union all 
select 3,N'华北','青岛' union all 
select 4,N'东北','黑龙江' union all 
select 5,N'东北','大连' union all 
select 6,N'西南','昆明' 

SELECT    地区=(CASE WHEN 城市=(
                         SELECT    top 1 城市
                         FROM      (
                                   SELECT    top 100 percent 地区,
                                             城市,
                                             count(1) 数量
                                   FROM      @a a
                                   GROUP BY  地区,
                                             城市
                                   ORDER BY  地区)bb
                         WHERE     地区=aa.地区) then 地区
          ELSE ''
          END),
          城市,
          数量
FROM     
          (
          SELECT    top 100 percent 地区,
                    城市,
                    count(1) 数量
          FROM      @a a
          GROUP BY  地区,
                    城市
          ORDER BY  地区)aa
--result
/*地区                             城市                             数量          
------------------------------ ------------------------------ ----------- 
东北                             大连                                       1 
                               黑龙江                                      1 
华北                             北京                                       1 
                               青岛                                       2 
西南                             昆明                                       1 

(所影响的行数为 5 行)

*/

#13


chuifengde 高人啊@!!!!!!!!!!令我高山仰止啊!!!结贴了````````

#14



select case when 城市 = 
  (select top 1 城市 from table where 地区 = a.地区 order by 城市) 
     then 地区 else '    ' end '地区', 城市, 数量 from 
  (select 地区, 城市, count(订单id) '数量' from table group by 地区, 城市 order by 地区, 城市) a

#1


isnull(地区,'')

#2


select 地区=case when 城市=(select top 1 城市 from tab where 地区=a.地区 order by 城市) then 地区 else '' end
,城市,订单数量
from tab a
order by 地区,城市

#3




create table tb(area varchar(10),city varchar(10),num int)

insert into tb select '华北' , '北京', 20 
insert into tb select '华北' , '青岛', 10 
insert into tb select '东北' , '黑龙江', 40 
insert into tb select '东北' , '大连', 50 
insert into tb select '西南' , '昆明', 30 




select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
                      city,num from tb T

/*
华北 北京 20
青岛 10
东北 黑龙江 40
大连 50
西南 昆明 30

*/

drop table tb

#4


create table cityInfo
(
region varchar(30),
city varchar(30),
productNum int
)
insert into cityInfo

select N'华北','北京',  20 union all 
select N'华北','青岛',  50 union all 
select N'东北','黑龙江',  30 union all 
select N'东北','大连',  80 union all 
select N'西南','昆明',  20 

select region=case when city=(select top 1 city from cityInfo 
where region=a.region ) then region else '' end
,city,productNum
from cityInfo a


结果
华北 北京 20
青岛 50
东北 黑龙江 30
大连 80
西南 昆明 20

#5


首先谢谢大家的关心,楼上几位大大的SQL语句我运行过还是不行,我发下我的表结构吧
订单ID int not null
地区   nvachar(40) null
城市   nvachar(40) null

订单数量我是count(订单ID)as'订单数量'

楼上各位大大能再帮我看看吗

#6


错误为:选择列表中的列 '订单.货主城市' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。

#7


订单的数量在哪里个表.

#8


订单数量就是count(订单ID)as '订单数量'

#9


引用 3 楼 lff642 的回复:
SQL codecreatetabletb(areavarchar(10),cityvarchar(10),numint)insertintotbselect'华北','北京',20insertintotbselect'华北','青岛',10insertintotbselect'东北','黑龙江',40insertintotbselect'东北','大连',50insertintotbselect'西南','昆明',30selectcasewhencity=(selecttop1cityfromtbwherearea=T.areaorderbyarea)thenareaelse''endarea,
                      city,numfromtb T/*华北    北京    20
    青岛    10

create table tb(area varchar(10),city varchar(10),num int)

insert into tb select '华北' , '北京', 20 
insert into tb select '东北' , '黑龙江', 40 
insert into tb select '东北' , '大连', 50 
insert into tb select '西南' , '昆明', 30 
insert into tb select '华北' , '青岛', 10 


--select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
  --                    city,num from tb T
select case when city=(select top 1 city from tb where area=T.area order by area) then area else '' end area,
city,num from tb T

/*
华北    北京    20
    青岛    10
东北    黑龙江    40
    大连    50
西南    昆明    30

*/

drop table tb 这样的顺序就出错了吧!不是通法!

#10


create table tb(area varchar(10),city varchar(10),num int,areaid int)

insert into tb select '华北' , '北京', 20 ,0
insert into tb select '华北' , '青岛', 10 ,0
insert into tb select '东北' , '黑龙江', 40 ,1
insert into tb select '东北' , '大连', 50 ,1
insert into tb select '西南' , '昆明', 30 ,2
insert into tb select '华北' , '石家庄', 10 ,0


--select case when city=(select top 1 city from tb where area = T.area order by area) then area else '' end area,
  --                    city,num from tb T
select case when city=(select top 1 city from tb where area=T.area order by area) then area else '' end area,
city,num from tb T order by areaid

/*
华北    北京    20
    青岛    10
东北    黑龙江    40
    大连    50
西南    昆明    30

*/

drop table tb

#11


还有没有高人解答啊        5555555555555      急死............

#12


DECLARE @a table
(
订单ID int not null ,
地区  nvarchar(40) null ,
城市  nvarchar(40) null 

)
insert into @a
select 1,N'华北','北京' union all 
select 2,N'华北','青岛' union all 
select 3,N'华北','青岛' union all 
select 4,N'东北','黑龙江' union all 
select 5,N'东北','大连' union all 
select 6,N'西南','昆明' 

SELECT    地区=(CASE WHEN 城市=(
                         SELECT    top 1 城市
                         FROM      (
                                   SELECT    top 100 percent 地区,
                                             城市,
                                             count(1) 数量
                                   FROM      @a a
                                   GROUP BY  地区,
                                             城市
                                   ORDER BY  地区)bb
                         WHERE     地区=aa.地区) then 地区
          ELSE ''
          END),
          城市,
          数量
FROM     
          (
          SELECT    top 100 percent 地区,
                    城市,
                    count(1) 数量
          FROM      @a a
          GROUP BY  地区,
                    城市
          ORDER BY  地区)aa
--result
/*地区                             城市                             数量          
------------------------------ ------------------------------ ----------- 
东北                             大连                                       1 
                               黑龙江                                      1 
华北                             北京                                       1 
                               青岛                                       2 
西南                             昆明                                       1 

(所影响的行数为 5 行)

*/

#13


chuifengde 高人啊@!!!!!!!!!!令我高山仰止啊!!!结贴了````````

#14



select case when 城市 = 
  (select top 1 城市 from table where 地区 = a.地区 order by 城市) 
     then 地区 else '    ' end '地区', 城市, 数量 from 
  (select 地区, 城市, count(订单id) '数量' from table group by 地区, 城市 order by 地区, 城市) a