如何将查询从 MYSQL 更改为 SQL SERVER for LIMIT

how to change query from MYSQL to SQL SERVER for LIMIT

如何将此 MYSQL 查询更改为 sql 服务器

SELECT
    id.value AS ICDCode,
    items.itemName AS ProblemListDescription,
    COUNT(*) as UsageCount
FROM problemlist pl
INNER JOIN items
    ON pl.asmtId = items.itemId
LEFT OUTER JOIN itemdetail id
    ON (items.itemId=id.itemId AND id.propId=13 )
WHERE (pl.SNOMED='' OR pl.SNOMED IS NULL) AND pl.deleteflag=0
group by id.value, items.itemName
ORDER BY UsageCount DESC, ICDCode ASC
LIMIT 0,10 ;

我已经在 sql 服务器上尝试过,但它抛出错误

select * from
(
    SELECT
        id.value AS ICDCode,
        items.itemName AS ProblemListDescription,
        COUNT(*)as UsageCount ,
        row_number() over (ORDER BY UsageCount DESC, ICDCode ASC ) as rownum
    FROM problemlist pl
    INNER JOIN items
        ON pl.asmtId=items.itemId
    LEFT OUTER JOIN itemdetail id
        ON (items.itemId=id.itemId AND id.propId=13 )
    WHERE (pl.SNOMED='' OR pl.SNOMED IS NULL) AND pl.deleteflag=0 
    group by id.value, items.itemName
) sno
WHERE rownum BETWEEN 0 AND 10 ;

错误信息是

有什么错误还是我必须以其他方式来做?指导我

我可能会在这里使用 TOP:

SELECT TOP 10
    id.value AS ICDCode,
    items.itemName AS ProblemListDescription,
    COUNT(*) as UsageCount
FROM problemlist pl
INNER JOIN items
    ON pl.asmtId = items.itemId
LEFT OUTER JOIN itemdetail id
    ON (items.itemId=id.itemId AND id.propId=13 )
WHERE (pl.SNOMED='' OR pl.SNOMED IS NULL) AND pl.deleteflag=0
GROUP BY
    id.value,
    items.itemName
ORDER BY
    UsageCount DESC, ICDCode

顺便说一下,您查询中的错误是您在 ROW_NUMBER 函数中引用了一个别名,但该别名在查询中的那个点尚不可用。您可以改用以下内容:

ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC, ICDCode) AS rownum