SQL Query无法获取正确的结果

时间:2013-07-15 20:23:49

标签: sql sql-server sql-server-2008 tsql

有人可以给我正确的查询。

我有一个表Item,其中包含两列ItemNoAliasItemNo

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

我正在尝试执行

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

此查询未提供正确的结果。

请帮忙

3 个答案:

答案 0 :(得分:4)

带有count的子查询是适用于所有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中,您还可以在CTE中使用COUNT(*) OVER (PARTITION BY ItemNo)

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

答案 1 :(得分:2)

这应该有效:

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

您正在计算ItemNo而不是AliasItemNo

答案 2 :(得分: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