1

需要编写一个 SQL 查询

得到任何 2EmpCodeEmpGroupcity = del

  • EmpCode是独特的
  • 1EmpCode只能有 1EmpGroup
  • 1EmpGroup可以有多个EmpCodes

:EMP_CITY

EmpCode  EmpGroup   City
1         A          del
2         A          del
3         B          del
4         B          del
5         C          del
6         C          del
7         A          ban
8         A          del

输出

EmpGroup: A
    1
    2
EmpGroup: B
    3
    4
EmpGroup: C
    5
    6
4

4 回答 4

1

试试这个查询

SET @level = 0;
SET @group = '';

SELECT 
EmpCode,EGroup
FROM (
    SELECT 
        City,
        EmpCode,
        EmpGroup,
        @level := IF(@group = EmpGroup, @level+1, 1) AS level, 
        @group := EmpGroup as EGroup 
    FROM test
    ORDER BY EmpGroup 
) rs
WHERE level < 3 

输出

EMPCODE     EGROUP
1           A
2           A
3           B
4           B
5           C
6           C

这是 sqlfiddle演示

于 2013-01-02T09:11:42.627 回答
0
  1. 您必须获取整个结果集,然后从每个 emp 组中打印 2 个结果。

    select EmpCode, EmpGroup, City
      from EMP_CITY
     ORDER BY EmpGroup
    
  2. 您可以在您的应用程序中获取 EmpGroup;然后为每个 Emp 组运行不同的查询。只有当每个 emp 组有很多员工时,这才会比 #1 快;这样单个查询的额外开销就会被更少的总返回行数所抵消。

    select DISTINCT EmpGroup
      from EMP_CITY
     ORDER BY EmpGroup
    
    select EmpCode, City
      from EMP_CITY
     where EmpGroup = ? limit 2
    

    ?作为各种 emp 组

于 2013-01-02T08:49:30.700 回答
0

如果可用,请使用顶部

SELECT TOP 2 EMPCODE FROM EMPLIST WHERE EMPGROUP=A

如果它不可用,那么试试这个

SELECT EMPCODE FROM EMPLIST WHERE EMPGROUP=A LIMIT 2

对于 oracle 试试这个

SELECT EMPCODE FROM EMPLIST WHERE EMPGROUP=A and ROWNUM<3
于 2013-01-02T09:11:50.683 回答
0

请看这个:

SELECT EmpGroup, EmpCode
FROM EMP_CITY a
WHERE EmpCode <= (
  SELECT EmpCode
  FROM Emp_CITY b
  WHERE EmpGroup = a.EmpGroup
  LIMIT 1, 1
)

我尝试通过 EmpGroup WHERE EmpGroup = a.EmpGroup获取行号 2 EmpCode 组,然后我选择 EmpCode 小于或等于我在子查询中获得的行号的位置。

于 2013-01-02T09:26:17.603 回答