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

sql复杂

发布时间: 2022-07-06 07:21:51

A. 复杂的sql语句

描述有点不具体,这个是把结果以列的形式展示:

selectid,name,casewhentime1>time2then'错误一'endastype1,
casewhentime1>time3then'错误二'endastype2,
casewhentime4>time5then'错误三'endastype3
fromtest
wherename='小明'

---结果集放在一起
selectid,name,casewhentime1>time2then'错误一'end+
casewhentime1>time3then'错误二'end+
casewhentime4>time5then'错误三'endasResult
fromtest
wherename='小明'

B. sql复杂统计

可能是我没看明白问题,按照我对问题的理解,解决如下:
select num,count(*) from tongji group by num
只是单纯的分组并统计各自组的数量,前提是你的表中,与编号相对应的数量都是1。如果不为1的话,就麻烦一点,估计需要用到存储过程。

C. sql复杂的存储过程写法

你的参数不知道都是什么意思

declare @xi varchar(10)
select @xi = 系 from stud where sfz = @sfz

select *
from stud a
where 系= @xi
and
(not exists(select 1 from stud where 系= a.系 and 年龄 < a.年龄)
or
not exists(select 1 from stud where 系= a.系 and 年龄 > a.年龄)
)

D. 一个极其复杂的sql语句

我没有你的表结构,我只给你说一下思想.首先你有五个表,get(order_id,id),account(type_id,money),travel(order_id,money),finance(ord_id,money),tourise(id)
有一个问题你没有说清楚,你要的是两者比较大于的记录还是小于的记录.
下面是你要的SQL语句,你写的和什么以及什么都搞乱了!一定要把你的话写清楚我才能帮你解决:
select get.order_id,sum(account.money),sum(travel.money)
from get inner join account on get.id=account.type_id
inner join travel on get.order_id=travel.order_id
inner join finance on get.order_id=finance.order_id
inner join tourist on get.order_id=tourist.id
where sum(account.money)>sum(travel.money)
group by get.order_id
因为我没有你的表结构,你只要看着我的捎改一下就行了!其实并不难,并且你叙述的内容也不是很清楚.

E. 复杂sql排序

你好,很高兴回答你的问题。
你的问题可以通过类似下面的sql完成。
select * from 表 order by cnt desc,createtime desc。
如果有帮助到你,请点击采纳。

F. sql复杂语句

我猜到lz在纠结什么问题。

where a.Change_Time=(select MIN(c.Change_Time) from Change c where c.Change_Time>b.Change_Time) 是这句的结果集吧

换个角度来想,其实这就话的意思就是在a表中大于b表的时间集中选最小的,很显然当b表时间为

2011-12-5时a表中大于此值的最小值为2011-12-6;当b表时间为2011-6-7时a表中大于此值的最小值为2011-12-5,因此会有两条记录产生。执行下面语句看一下,将非常清晰

selecta.*,b.*fromChangea,Changeb
wherea.Change_Time=(selectMIN(c.Change_Time)fromChangecwherec.Change_Time>b.Change_Time);

结果集:
1 01 信息 2011-12-6 01 计算机 2011-12-5
2 01 计算机 2011-12-5 01 电子 2011-6-7

然后外层再选择列,就是查出来的结果了。有问题再追问吧,望采纳。

G. 求一个复杂的SQL语句

-- =============================================
-- Author: <Rocky,f_split>
-- Create date: <2010.11.4>
-- Description: <将传入的参数以字符分割,并返回表格形式的参数所分割出来的值>

--select * from f_split('1,2,3,4,5,6',',')
-- =============================================
create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql)) --去掉字符中的空格
set @i=charindex(@StrSeprate,@SourceSql) --找分割符在字符中的位置
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end
GO
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE NAME='test_4')
DROP TABLE test_4
GO

create table test_4
(
id varchar(20) not null,
value varchar(100) not null
)
insert into test_4 values('1008','A1|A2|A3')
insert into test_4 values('1009','B1|B2|B3|B4')

DECLARE @COUNT INT,@INDEX INT,@ID VARCHAR(20),@VALUE VARCHAR(100)

if object_id(N'[tempdb].dbo.[#TEMP_TEST_4_1]')>0
DROP TABLE #TEMP_TEST_4_1

if object_id(N'[tempdb].dbo.[#TEMP_TEST_4_2]')>0
DROP TABLE #TEMP_TEST_4_2

SELECT * INTO #TEMP_TEST_4_2 FROM test_4 WHERE 1=2

SELECT IDENTITY(INT,1,1) AS IDX ,* INTO #TEMP_TEST_4_1 FROM test_4
SELECT @COUNT=COUNT(*) FROM #TEMP_TEST_4_1

SET @INDEX=1
WHILE (@INDEX<=@COUNT)
BEGIN
SELECT @ID=ID,@VALUE=VALUE FROM #TEMP_TEST_4_1 WHERE IDX=@INDEX
INSERT INTO #TEMP_TEST_4_2 SELECT @ID,* FROM F_SPLIT(@VALUE,'|')
SET @INDEX=@INDEX+1
END

SELECT * FROM #TEMP_TEST_4_2

以上代码经过测试,完全能满足你的需求,请采纳,谢谢!

H. SQL 复杂表查询

看了头晕,为何要用中文字段呀,呵呵~

select 主表.*,工序表.工序名称,作废表.作废名称 from 主表
left 工序表 on 主表.工序代号=工序表.工序代号
left 作废表 on 主表.作废代号=作废表.作废代号
where 主表.工序代号 in(601,602)--你要查的错误工序代号,用逗号隔开,比如说601,602
and 主表.产品名称 in(A01,B01)--你要查的产品名称,用逗号隔开,比如说A01,B01

I. SQL复杂语句

你这里的A1,B1,C1三个条没有任何条件直接连接吗?E1,F1,G1也是无条件连接?

如果是我,习惯于这样写

select*fromA1
joinB1on条件
joinC1on条件
fulljoin(
select*
fromE1
joinF1on条件
joinG1on条件
)EFGon.....


另外如果A1,B1,C1三表连接具有一定的通用性,可以把select*fromA1,B1,C1做成视图,用起来方便些,E1,F1,G1也一样


我习惯上使用Join,和join的这张表有关的连接条件写在on后面,用于过滤的条件或其他非连接条件写在where里面,这样即使数据表很多也很清楚

J. 复杂sql语句查询

selectid,name,isnull((selectSUM(金额)fromB表whereid=A表.idandbno=20),0)正常消费,isnull((selectSUM(金额)fromB表whereid=A表.idandbno=30),0)充值,(selecttop1余额fromB表whereid=A表.idorderby时间desc)余额,(selectMAX(时间)fromB表whereid=A表.id)时间
fromA表

这样看一下行不行