当前位置:首页 » 编程语言 » sql动态列查询
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql动态列查询

发布时间: 2022-10-03 12:40:49

‘壹’ sql可以动态查询吗

没看明白 怎么个动态法
select QTY_on_WAY from prdt1 where prd_no=:prd_no 跟 TF_MO表 有啥关系??

‘贰’ 如何解决sql语句中的动态多列查询问题

select sum(case when con1||con2='11' then count else 0 end) 三星笔记本,
sum(case when con1||con2='12' then count else 0 end) 三星台式机,
sum(case when con1||con2='22' then count else 0 end) 苹果笔记本,
sum(case when con1||con2='22' then count else 0 end) 苹果台式机
from table_name

另外用decode一样可以替代case when,效率一样

‘叁’ 请问sql中怎么实现字段的动态查询

用动态sql即可实现。

如student表中有如下内容:

‘肆’ SQL如何使用select动态列 from 进行查询

这就是传说中的交叉表
/*
普通行列转换

假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
*/

-------------------------------------------------------------------------
/*
想变成
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
*/

create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)

insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go

--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
/*
姓名 数学 物理 语文
---------- ----------- ----------- -----------
李四 84 94 74
张三 83 93 74
*/

‘伍’ 如何执行 sql 动态分组 查询

你说的前后一周内没有明白范围,是你查询的日期,还是订单日期
还是没太明白前后一周内,我先这样写吧,日期范围你自己套进去就行了

select id,商品名称,订单金额,数量,订单日期
,(select sum(订单金额) from 订单表 t2 where t1.商品名称=t2.商品名称 and t2.订单日期>=(t1.订单日期-7) and t2.订单日期<=(t1.订单日期+7)) 合计值
from 订单表 t1
where to_char(t1.订单日期, 'YYYY-MM-DD') >= '2019-03-01' and to_char(t1.订单日期, 'YYYY-MM-DD')<'2019-03-02';

‘陆’ SQL查询动态列的方法

首先,这张表本身就很不合理,如果不是硬要用这种结构,推荐您使用一列存储数据,我有点明白您可能是要最后通过select生成一张月报表,不知我的猜想对吗?(好像还是没搞清楚)

就事论事吧
create proc xxx @day int
as
if @day=1 select * from 表 where D1=@day
if @day=2 select * from 表 where D2=@day
if @day=3 select * from 表 where D3=@day
if @day=4 select * from 表 where D4=@day
后面就不写了,共要31行,恐怕也是最好想出的办法了

‘柒’ sql动态查询

用动态sql即可实现。

如student表中有如下内容:

‘捌’ SQL 动态查询问题

是不是可以从T_SQL中取到@sql中用charindex的方式取得变量的位置,然后进行字符串截断,自己拼接,在用execute(@sql)来执行?
因为T_SQL中取出来后,变量也就不是原有的变量了,而是都进入了一个字符串当中,所以再也不能当做变量使用了。你只能把这个变量找出来,然后通过字符串截断的方式把前后截出来,然后把你真正的变量拼到上面。

‘玖’ sql交叉动态列查询

select b.id,b.title,
min(case when a.id=1 then '是' end) as 新闻,
min(case when a.id=2 then '是' end) as 公告,
min(case when a.id=3 then '是' end) as 帖子,
from a,b where a.id=b.a.id
group by b.id,b.title

‘拾’ oralce怎么用SQL查询出动态列出来呢根据查询条件得到相应的列。

select 商品名称,SUM(订单数量),
SUM(case TO_CHAR(订单日期,'MM') when '04' then 1 else 0 end) "4月",
SUM(case TO_CHAR(订单日期,'MM') when '05' then 1 else 0 end) "5月",
SUM(case TO_CHAR(订单日期,'MM') when '06' then 1 else 0 end) "6月"
from 数据表
where to_char(订单日期,'yyyyMM') >= '20105' AND to_char(订单日期,'yyyyMM') <= '20106'
group by to_char(订单日期,'MM')

这个是可以的,根据实际的数据库修改一下相关字段就行了