0

有人可以给我正确的查询吗?

我有一个Item有两列的表,ItemNo并且AliasItemNo.

我想写一个查询来只返回那些有多个别名的项目

我正在尝试执行

select ItemNo, AliasItemNo 
from Item 
group by ItemNo, AliasItemNo 
having count(ItemNo) > 1 
order by ItemNo Asc

此查询没有给出正确的结果。

请帮忙

4

3 回答 3

4

带有计数的子查询是适用于所有 rdbms 的方式:

SELECT ItemNo, AliasItemNo FROM Item i1
WHERE (SELECT COUNT(*) FROM Item i2 WHERE i1.ItemNo=i2.ItemNo) > 1
ORDER BY ItemNo Asc

在 SQL-Server >= 2005 中,您还可以COUNT(*) OVER (PARTITION BY ItemNo)在 CTE 中使用:

WITH CTE AS(
   SELECT ItemNo,AliasItemNo, 
    Num=COUNT(*) OVER (PARTITION BY ItemNo)
   FROM Item)
SELECT ItemNo, AliasItemNo FROM CTE
WHERE  Num > 1
ORDER BY ItemNo Asc;

演示:http ://sqlfiddle.com/#!6/78d9c/9/1

于 2013-07-15T20:27:24.040 回答
2

这应该有效:

select ItemNo
from Item 
group by ItemNo
having count(AliasItemNo) > 1 
order by ItemNo Asc

您正在计算 ItemNo 而不是 AliasItemNo

于 2013-07-15T20:33:52.983 回答
0

有很多方法可以做到这一点。这里有几种方法。


 --using a sub query
SELECT
    ItemNo,
    AliasItemNo
FROM
    Item INNER JOIN
        (
            SELECT
                ItemNo
            GROUP BY
                ItemNo
            HAVING
                COUNT(AliasItemNo) > 1)
            AS dupes
        ON
            Item.ItemNo = dupes.ItemNo
ORDER BY
    Item.ItemNo ASC

 --using CTE
;WITH
dupes AS
(
    SELECT
        ItemNo
    GROUP BY
        ItemNo
    HAVING
        COUNT(AliasItemNo) > 1
)
SELECT
    ItemNo,
    AliasItemNo
FROM
    Item INNER JOIN dupes
        ON
            Item.ItemNo = dupes.ItemNo
ORDER BY
    Item.ItemNo ASC

于 2013-07-15T20:29:11.237 回答