下表中有22行数据
CREATE TABLE #E_Goods
( ID [int] IDENTITY(1,1) NOT NULL, Val1 [int], Val2 [int], Val3 [int]);INSERT INTO #E_Goods (Val1, Val2, Val3)
select 11250,11260,258 UNION ALL
select 11255,11257,74 UNION ALL
select 11248,11250,94 UNION ALL
select 11251,11254,85 UNION ALL
select 11251,11254,88 UNION ALL
select 11253,11260,126 UNION ALL
select 11258,11262,60 UNION ALL
select 11260,11272,107 UNION ALL
select 11267,11282,168 UNION ALL
select 11277,11286,160 UNION ALL
select 11285,11292,178 UNION ALL
select 11283,11285,173 UNION ALL
select 11284,11302,100 UNION ALL
select 11289,11292,127 UNION ALL
select 11291,11295,118 UNION ALL
select 11295,11309,527 UNION ALL
select 11294,11308,199 UNION ALL
select 11307,11316,73 UNION ALL
select 11314,11345,223 UNION ALL
select 11331,11344,192 UNION ALL
select 11322,11323,219 UNION ALL
select 11316,11322,127 UNION ALL
select 11315,11319,118;
ID列是自增序号,想以ID为分组依据,五行为一组数据,想得到每一组中(第一行(val1),第五行(val2),MAX(val3))
查询后得到如下结果:
ID val1 val2 val3
5 11250 11254 258
10 11253 11286 168
15 11285 11295 178
20 11295 11344 527
------解决思路----------------------
IF OBJECT_ID('tempdb..#E_Goods') IS NOT NULL
BEGIN
DROP TABLE #E_Goods
END
GO
CREATE TABLE #E_Goods
(
ID [int] IDENTITY(1,1) NOT NULL,
Val1 [int],
Val2 [int],
Val3 [int]
);
--插入数据
INSERT INTO #E_Goods (Val1, Val2, Val3)
select 11250,11260,258 UNION ALL
select 11255,11257,74 UNION ALL
select 11248,11250,94 UNION ALL
select 11251,11254,85 UNION ALL
select 11251,11254,88 UNION ALL
select 11253,11260,126 UNION ALL
select 11258,11262,60 UNION ALL
select 11260,11272,107 UNION ALL
select 11267,11282,168 UNION ALL
select 11277,11286,160 UNION ALL
select 11285,11292,178 UNION ALL
select 11283,11285,173 UNION ALL
select 11284,11302,100 UNION ALL
select 11289,11292,127 UNION ALL
select 11291,11295,118 UNION ALL
select 11295,11309,527 UNION ALL
select 11294,11308,199 UNION ALL
select 11307,11316,73 UNION ALL
select 11314,11345,223 UNION ALL
select 11331,11344,192 UNION ALL
select 11322,11323,219 UNION ALL
select 11316,11322,127 UNION ALL
select 11315,11319,118;
SELECT * FROM #E_Goods
/*
ID列是自增序号,想以ID为分组依据,五行为一组数据,想得到每一组中(第一行(val1),第五行(val2),MAX(val3))
查询后得到如下结果:
ID val1 val2 val3
5 11250 11254 258
10 11253 11286 168
15 11285 11295 178
20 11295 11344 527
*/
;WITH t AS (
SELECt *, ((id-1)/5)+1 AS g FROM #E_Goods
)
SELECT (g*5) AS ID,
(SELECT Val1 FROM t WHERE t.id=(a.g*5-4)) AS val1,
(SELECT Val2 FROM t WHERE t.id=(a.g*5)) AS val2,
MAX(A.Val3) AS val3
FROM t A
GROUP BY A.g

确实做出来了, 不过, 您这题目着实……
------解决思路----------------------
给你一个笨法
declare @i int,@j int,@count int
set @i=1
set @j=5
select @count=COUNT(1) from #E_Goods
create table #t(id int,Val1 [int], Val2 [int], Val3 [int])
while(@j<=@count)
begin
insert into #t
select id,val1,val2,val3
from (select 1 item,val1
from #E_Goods where id=@i) t1
left join (select 1 item,val2
from #E_Goods where id=@j) t2 on t1.item=t2.item
left join (select 1 item,MAX(id) id,max(val3) val3
from #E_Goods where id between @i and @j) t3 on t1.item=t3.item
set @i=@i+5
set @j=@j+5
end
select * from #t
drop table #t
------解决思路----------------------
SELECT T1.ID
,T3.Val1
,T2.Val2
,T1.Val3
FROM (
SELECT MAX(ID)ID,MIN(ID)Val1ID,MAX(Val3)Val3
FROM #E_Goods
GROUP BY (ID-1)/5
) T1
JOIN #E_Goods T2 ON T1.ID=T2.ID
JOIN #E_Goods T3 ON T1.Val1ID=T3.ID
WHERE T1.ID%5=0