① sql如何将一个表里的不同条件查询结果拼接显示
关系型数据库是以一行来表示一条数据的,而不是一列。你要得出的那个表格,一行没有任何意义。
代码仅作参考:
declare@count0int;
declare@count1int;
declare@count2int;
declare@count3int;
if(object_id('TableA')isnotnull)droptableTableA
selectgetdate()ascreateTime,产品名称intoTableAfrom[表名]where销售金额>=200and销售金额<=599;
if(object_id('TableB')isnotnull)droptableTableB
selectgetdate()ascreateTime,产品名称intoTableBfrom[表名]where销售金额>=600and销售金额<=899;
if(object_id('TableC')isnotnull)droptableTableC
selectgetdate()ascreateTime,产品名称intoTableCfrom[表名]where销售金额>=900;
select@count1=count(1)fromTableA;
select@count2=count(1)fromTableB;
select@count3=count(1)fromTableC;
set@count0=@count1;
if@count0<@count2
begin
set@count0=@count2;
end
if@count0<@count3
begin
set@count0=@count3;
end
declare@iint;
set@i=0;
while(@count1+@i)<@count0
begin
insertintoTableAvalues(getdate(),'');
set@i=@i+1;
end
SET@i=0;
while(@count2+@i)<@count0
begin
insertintoTableBvalues(getdate(),'');
set@i=@i+1;
end
SET@i=0;
while(@count3+@i)<@count0
begin
insertintoTableCvalues(getdate(),'');
set@i=@i+1;
end
selecta.产品名称as'200到599',b.产品名称as'600到899',c.产品名称as'900以上'
from(selectrow_number()over(orderbycreateTime)asrownum,产品名称fromTableA)a
leftjoin
(selectrow_number()over(orderbycreateTime)asrownum,产品名称fromTableB)bona.rownum=b.rownum
leftjoin
(selectrow_number()over(orderbycreateTime)asrownum,产品名称fromTableC)conc.rownum=b.rownum
② sql select语句,查询出两列结果拼接在一起
1、Oracle创建表,含两列,name和job;create table test_job(name varchar2(30), job varchar2(30));
③ SQL server 怎样将循环查询的多个结果集进行左连接
用游标:
declare @变量1 varchar(50),@变量2 varchar(50)
-----创建游标
declare mycurs cursor for select 字段A,字段B from table1
open mycurs-----打开游标
fetch next from mycurs into @变量1,变量2
while @@fetch_Status=0--循环游标
begin
---循环处理
fetch next from mycurs into @变量1,变量2
end
close mycurs
Deallocate mycurs
我说的可能不好,你自己去可以看看游标的相关资料。
④ sql语句 怎么把查询的多条结果用,号拼接起来,不用函数就用SQL语句
-- 单列拼接,先查出一行,再加上逗号,接着拼接 查出的下一行
select group_concat(E.SUPPORT)
from ENGINES E
where E.XA IN('YES','NO')
--结果如下:YES,YES,YES,YES,YES,YES,DEFAULT,YES
-- 将查询的结果中的 "," 号,替换成 "**" 号
select REPLACE(group_concat(E.SUPPORT),',','**')
from ENGINES E
where E.XA IN('YES','NO')
--结果如下:YES**YES**YES**YES**YES**YES**DEFAULT**YES
-- 将查询的结果中 重复 的记录 去掉,只剩一条记录,然后再拼接
select group_concat(DISTINCT(E.SUPPORT))
from ENGINES E
where E.XA IN('YES','NO')
--结果如下:YES,DEFAULT
-- 多列拼接,同一行的先拼接,再加上逗号,接着拼接下一行
select group_concat(E.ENGINE,E.SUPPORT)
from ENGINES E
where E.XA IN('YES','NO')
--结果如下:MRG_MYISAMYES,MyISAMYES,BLACKHOLEYES,CSVYES,MEMORYYES,ARCHIVEYES,InnoDBDEFAULT,PERFORMANCE_SCHEMAYES
⑤ 连接两表查询结果的SQL语句
如果只查询两个表有对应关系的资料,则用内连接:
select
*
from
table1
inner
join
table2
on
table1.id=table2.id;
如果查询表1中有的资料,表2中若有则也显示,则使用左连接:
select
*
from
table1
left
join
table2
on
table1.id=table2.id;
不管两个表是否有关联,所有资料都显示,则用外链接:
selecg
*
from
table1
outer
join
table2
on
table1.id=table2.id;
⑥ sql查询结果拼接
;
with class as (
select '1' as class_id,'班级1' as name
union
select '2','班级2'
),
student as (
select '2' as classid,'张三' as name
union
select '2','李四'
union
select '1','王五'
union
select '2','小赵'
union
select '1','小明'
)
select classid,
u_type=stuff((select ','+name from student where k.classid=classid for XML path('')),1,1,'')
from student k
group by classid
classid u_type
------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 王五,小明
2 李四,小赵,张三
(2 行受影响)
⑦ 循环拼接sql语句条件
Stringtmp="select*fromtableNamewhereidin(";
for(inti=0;i<a.length;i++){
//判断是不是数组最后一个元素,不是就加上逗号,是就不加逗号
if(i<a.length-1)
tmp+=a[i]+",";
else{
tmp+=a[i];
}
}
tmp+=")";
⑧ SQL server查询结果拼接
问题分析:查询结果拼接有多种
示例使用的临时表:
CreateTablet_b_TableTemp
(
IDasintnotnull,
usernameasvarchar(50)null
)
示例1、查询username(字符列)与字符串(用户姓名)拼接
select'用户姓名'+usernamefromt_b_TableTemp
示例2、查询ID(数字列)与字符串(序号)拼接
select'序号'+cast(IDasvarchar(50))fromt_b_TableTemp
与示例1比较后你就知道了,凡是遇到数字类型和字符拼接,都需要先将数字类型转换为字符串类型,转换函数有Cast和Convert,你可以酌情使用。
示例3:多列合并
selectcast(IDasvarchar(50))+usernamefromt_b_TableTemp
示例4:多个查询结果的合并(使用Union All或Union),在使用的时候一定要注意多个查询结果的列数,列类型必须一致
selectID,usernamefromt_b_TableTemp
unionall
selectID,usernamefromt_b_TableTemp
上面的查询结果是t_b_TableTemp记录得双倍,也就是说Union all方式是将两个查询结果拼接起来为一个查询结果。
selectID,usernamefromt_b_TableTemp
union
selectID,usernamefromt_b_TableTemp
上面的查询结果和t_b_TableTemp记录一致,也就是说Union是会去除完全重复的记录
⑨ SQL循环查询如何合并查询结果到一个表,每个结果表作为一个字段
简单写了一个sqlserver的
按照你说的建个表,放了点数据
createtable订单
(订单号int,
订单日期datetime,
订单价值int)
insertinto订单values(1,'2013-05-01',10)
insertinto订单values(2,'2013-05-01',20)
insertinto订单values(3,'2013-06-01',30)
insertinto订单values(4,'2013-06-01',40)
insertinto订单values(5,'2013-07-01',50)
insertinto订单values(6,'2013-08-01',60)
insertinto订单values(7,'2013-08-01',70)
insertinto订单values(8,'2013-09-01',80)
insertinto订单values(9,'2013-09-01',90)
insertinto订单values(10,'2013-10-01',100)
insertinto订单values(11,'2013-10-01',110)
insertinto订单values(12,'2013-11-01',120)
insertinto订单values(13,'2013-11-01',130)
insertinto订单values(14,'2013-12-01',140)
你要查上个月到之前某个月的
所以执行这个
declare@sqlvarchar(4000)
declare@indexint
set@index=2--这个就是你说的要查前某个月的,这里写2就代表9,10,11三个月
set@sql='select''汇总''as汇总'
select@sql=@sql+',sum(isnull(caseconvert(varchar(7),订单日期,120)when'''+convert(varchar(7),[订单日期],120)+'''then[订单价值]end,0))as
['+convert(varchar(7),[订单日期],120)+']'
from(selectdistinctconvert(varchar(7),订单日期,120)订单日期from[订单]where
convert(varchar(7),订单日期,120)>=convert(varchar(7),dateadd(month,(-1-cast(''+@index+''asint)),getdate()),120)
andconvert(varchar(7),订单日期,120)<convert(varchar(7),getdate(),120))asa
select@sql=@sql+'from[订单]'
exec(@sql)--这句我是执行sql,你可以直接把上句改成createtable的形式,把sql语句print出来,看看
结果