sql 循环查询
发布网友
发布时间:2022-04-09 04:12
我来回答
共5个回答
热心网友
时间:2022-04-09 05:41
MSSQL 数据库下实现:
CREATE TABLE #TEMP (单号 INT, 价格 FLOAT)
INSERT INTO #TEMP VALUES(2,50)
INSERT INTO #TEMP VALUES(1,50)
INSERT INTO #TEMP VALUES(3,60)
INSERT INTO #TEMP VALUES(4,60)
INSERT INTO #TEMP VALUES(7,60)
INSERT INTO #TEMP VALUES(8,60)
DECLARE @REFID INT
, @ORDERID VARCHAR(30)
, @JIAGE VARCHAR(100)
SELECT REFID = IDENTITY(INT , 1, 1), DealFlg = 0, 单号,价格
INTO #Temp_Lists
FROM #TEMP
SELECT @REFID = MIN(REFID) FROM #Temp_Lists WHERE DealFlg = 0
CREATE TABLE #TEMP1 (单号 VARCHAR(100), 价格 FLOAT)
DECLARE @TEMPDANHAO VARCHAR
WHILE @REFID IS NOT NULL
BEGIN
SELECT @ORDERID = 单号,@JIAGE = 价格 FROM #Temp_Lists WHERE REFID = @REFID
IF EXISTS(SELECT 价格 FROM #TEMP1 WHERE 价格 = @JIAGE)
BEGIN
SELECT @TEMPDANHAO = 单号 FROM #TEMP WHERE 单号 = @ORDERID
PRINT @ORDERID
UPDATE #TEMP1 SET 单号 = convert(varchar(10),单号)+ ',' + @TEMPDANHAO WHERE 价格 = @JIAGE
END
ELSE
BEGIN
INSERT INTO #TEMP1 SELECT * FROM #TEMP WHERE 单号 = @ORDERID
END
UPDATE #Temp_Lists SET DealFlg = 1 WHERE REFID = @REFID
SELECT @REFID = MIN(REFID) FROM #Temp_Lists WHERE DealFlg = 0 AND REFID > @REFID
END
SELECT * FROM #TEMP1
DROP TABLE #TEMP1
DROP TABLE #Temp_Lists
DROP TABLE #TEMP
热心网友
时间:2022-04-09 06:59
这个可以借助函数来实现, 实现一个函数, 参数为价格, 返回值为字串, 就是单号的连接; 然后在查询中调用该函数获得单号串.
热心网友
时间:2022-04-09 08:34
if object_id('fun_SumStr') > 0
drop function fun_SumStr
go
create function fun_SumStr(@Col1 nchar(5))
returns varchar(500)
as
begin
declare @S varchar(500)
select @S=isnull(@S,'') + Cast(OrderId as varchar(50)) from Orders where CustomerID = @Col1
return @S
end
go
Select distinct CustomerID,Col2 = dbo.fun_SumStr(CustomerID) from Orders
go
// 列名和表名换成 你自己的
// 还可以用游标实现
if object_id('temp') > 0
drop table temp
go
create table temp
(
col1 varchar(500),
col2 nchar(5)
)
go
declare @test_Cursor CURSOR
set @test_Cursor = cursor for
select CustomerID from orders group by CustomerID
open @test_Cursor
declare @chrId varchar(500)
declare @customerId nchar(5)
while @@FETCH_STATUS = 0
begin
fetch next from @test_Cursor into @customerId
set @chrId = ''
select @chrId = @chrId + cast(OrderID as varchar(50)) from orders where CustomerID = @customerId
insert into temp values(@chrId,@customerId)
end
go
select * from temp
go
热心网友
时间:2022-04-09 10:25
用临时表,查一次把处理过的删掉,再查,一直到数据清空?
热心网友
时间:2022-04-09 12:33
能先告诉我你用的是什么数据库吗?
SQL是通用的,但各数据库的函数不是通用的。
是否可以解决您的问题?