5 个解决方案
#1
类似sql :
如果你觉得不配套, 把你的表结构贴出来!
SELECT g2.*
FROM (
SELECT TOP(
SELECT COUNT(1)
FROM test01
) g.id,
COUNT(g.ID) AS gID
FROM Graph g
GROUP BY
g.ID
) AS t
INNER JOIN Graph g2
ON g2.id = t.id
如果你觉得不配套, 把你的表结构贴出来!
#2
select * from (select *,rowindex=row_number()over(partition by flag order by id) from url)t where t.rowindex<=5
分组之后每组取前五条记录
分组之后每组取前五条记录
#3
比如说 表A
ID 姓名 成绩 志愿班级
001 ** 98 1班
002 ** 96 1班
003 ** 85 1班
004 ** 95 2班
005 ** 65 3班
006 ** 88 2班
007 ** 69 1班
008 ** 76 3班
009 ** 78 3班
010 ** 93 2班
表B
班级 录取人数
1班 3
2班 4
3班 5
怎么从表A中挑出表B中要求的人数呢?
#4
--表A
-- ID 姓名 成绩 志愿班级
--001 ** 98 1班
--002 ** 96 1班
--003 ** 85 1班
--004 ** 95 2班
--005 ** 65 3班
--006 ** 88 2班
--007 ** 69 1班
--008 ** 76 3班
--009 ** 78 3班
--010 ** 93 2班
--表B
--班级 录取人数
--1班 2
--2班 1
--3班 2
--怎么从表A中挑出表B中要求的人数呢?
--0. 建立初始环境, 插入数据等.
--建立表变量 ( 相当于你的真实表 )
DECLARE @A TABLE ( StuID VARCHAR(3), StuName VARCHAR(50), Score INT, StuClass VARCHAR(10))
DECLARE @B TABLE ( StuClass VARCHAR(10), AdmissionNumber INT)
--插入数据
INSERT INTO @A
SELECT '001','王小1',75,'1班' union
SELECT '002','王小2',96,'1班' union
SELECT '003','王小3',85,'1班' union
SELECT '004','王小4',95,'2班' union
SELECT '005','王小5',65,'3班' union
SELECT '006','王小6',88,'2班' union
SELECT '007','王小7',69,'1班' union
SELECT '008','王小8',76,'3班' union
SELECT '009','王小9',78,'3班' union
SELECT '010','王大0',93,'2班'
--插入数据
INSERT INTO @B
SELECT '1班',2 union
SELECT '2班',1 union
SELECT '3班',2
--查看原表中数据
SELECT * FROM @A
SELECT * FROM @B
--1. 查询
--建立两临时表变量
DECLARE @TempA TABLE ( StuID VARCHAR(3), StuName VARCHAR(50), Score INT, StuClass VARCHAR(10))
DECLARE @TempB TABLE ( RowNum INT, StuClass VARCHAR(10), AdmissionNumber INT)
--给班级临时表加入行号
INSERT INTO @TempB
SELECT ROW_NUMBER() OVER (ORDER BY StuClass),StuClass,AdmissionNumber FROM @B
--为循环变量赋值
DECLARE @rowId INT,@rowMax INT
SET @rowId=1
SELECT @rowMax=MAX(rownum) FROM @TempB
--遍历每个班级,将适合条件的插入到 录取表 @TempA 中
WHILE (@rowId<=@rowMax)
BEGIN
INSERT INTO @TempA
SELECT TOP (SELECT AdmissionNumber FROM @TempB WHERE rownum = @rowId)
* FROM @A WHERE StuClass IN (SELECT stuclass FROM @TempB WHERE rownum = @rowId)
ORDER BY Score DESC
SET @rowId=@rowId+1
END
--查询最后结果
SELECT * FROM @TempA
#5
真是晕死了, 结贴都不会呀……
#1
类似sql :
如果你觉得不配套, 把你的表结构贴出来!
SELECT g2.*
FROM (
SELECT TOP(
SELECT COUNT(1)
FROM test01
) g.id,
COUNT(g.ID) AS gID
FROM Graph g
GROUP BY
g.ID
) AS t
INNER JOIN Graph g2
ON g2.id = t.id
如果你觉得不配套, 把你的表结构贴出来!
#2
select * from (select *,rowindex=row_number()over(partition by flag order by id) from url)t where t.rowindex<=5
分组之后每组取前五条记录
分组之后每组取前五条记录
#3
比如说 表A
ID 姓名 成绩 志愿班级
001 ** 98 1班
002 ** 96 1班
003 ** 85 1班
004 ** 95 2班
005 ** 65 3班
006 ** 88 2班
007 ** 69 1班
008 ** 76 3班
009 ** 78 3班
010 ** 93 2班
表B
班级 录取人数
1班 3
2班 4
3班 5
怎么从表A中挑出表B中要求的人数呢?
#4
--表A
-- ID 姓名 成绩 志愿班级
--001 ** 98 1班
--002 ** 96 1班
--003 ** 85 1班
--004 ** 95 2班
--005 ** 65 3班
--006 ** 88 2班
--007 ** 69 1班
--008 ** 76 3班
--009 ** 78 3班
--010 ** 93 2班
--表B
--班级 录取人数
--1班 2
--2班 1
--3班 2
--怎么从表A中挑出表B中要求的人数呢?
--0. 建立初始环境, 插入数据等.
--建立表变量 ( 相当于你的真实表 )
DECLARE @A TABLE ( StuID VARCHAR(3), StuName VARCHAR(50), Score INT, StuClass VARCHAR(10))
DECLARE @B TABLE ( StuClass VARCHAR(10), AdmissionNumber INT)
--插入数据
INSERT INTO @A
SELECT '001','王小1',75,'1班' union
SELECT '002','王小2',96,'1班' union
SELECT '003','王小3',85,'1班' union
SELECT '004','王小4',95,'2班' union
SELECT '005','王小5',65,'3班' union
SELECT '006','王小6',88,'2班' union
SELECT '007','王小7',69,'1班' union
SELECT '008','王小8',76,'3班' union
SELECT '009','王小9',78,'3班' union
SELECT '010','王大0',93,'2班'
--插入数据
INSERT INTO @B
SELECT '1班',2 union
SELECT '2班',1 union
SELECT '3班',2
--查看原表中数据
SELECT * FROM @A
SELECT * FROM @B
--1. 查询
--建立两临时表变量
DECLARE @TempA TABLE ( StuID VARCHAR(3), StuName VARCHAR(50), Score INT, StuClass VARCHAR(10))
DECLARE @TempB TABLE ( RowNum INT, StuClass VARCHAR(10), AdmissionNumber INT)
--给班级临时表加入行号
INSERT INTO @TempB
SELECT ROW_NUMBER() OVER (ORDER BY StuClass),StuClass,AdmissionNumber FROM @B
--为循环变量赋值
DECLARE @rowId INT,@rowMax INT
SET @rowId=1
SELECT @rowMax=MAX(rownum) FROM @TempB
--遍历每个班级,将适合条件的插入到 录取表 @TempA 中
WHILE (@rowId<=@rowMax)
BEGIN
INSERT INTO @TempA
SELECT TOP (SELECT AdmissionNumber FROM @TempB WHERE rownum = @rowId)
* FROM @A WHERE StuClass IN (SELECT stuclass FROM @TempB WHERE rownum = @rowId)
ORDER BY Score DESC
SET @rowId=@rowId+1
END
--查询最后结果
SELECT * FROM @TempA
#5
真是晕死了, 结贴都不会呀……