SQL Query的奇怪要求

时间:2014-04-25 06:46:10

标签: sql

我有一个包含列'Id'和'Status'的表格。 我想编写一个SQL语句来从这个表中选择前50行,其中25个状态为1行,25个行,状态2为一个SQL查询。

我希望我的结果具有备用状态的行。

请建议我如何编写此查询。

2 个答案:

答案 0 :(得分:3)

如果你使用MSSQL,你可以这样做:

SELECT TOP 25
    *
FROM
    Table1
WHERE
    Table1.Status=1
UNION ALL
SELECT TOP 25
    *
FROM
    Table1
WHERE
    Table1.Status=2

如果您使用MYSQL,则必须使用LIMIT。像这样:

(
    SELECT 
        *
    FROM 
        Table1
    WHERE
        Table1.Status=1
    LIMIT 25
)
UNION ALL
(
    SELECT 
        *
    FROM 
        Table1
    WHERE
        Table1.Status=2
    LIMIT 25
);

答案 1 :(得分:1)

对于 SQL Server ,请使用TOP

SELECT TOP 25 * FROM TableName WHERE Status=1
UNION ALL
SELECT TOP 25 * FROM TableName WHERE Status=2

替代结果:

SELECT * FROM 
(
    SELECT TOP 25 *,ROW_NUMBER() OVER(ORDER BY Status) as RN FROM TableName WHERE Status=1
    UNION ALL
    SELECT TOP 25 *,ROW_NUMBER() OVER(ORDER BY Status) as RN FROM TableName WHERE Status=2
) T
ORDER BY RN