选择列中具有相同值但在另一列中具有不同值的记录

时间:2016-12-13 08:26:51

标签: sqlite having

在我的表INVENTORY中,有3列varchar代码,版本,说明。 e.g

code  || version || description
--------------------------
AS100 ||   01    || description
AS100 ||   02    || description
AS100 ||   02    || description
AS100 ||   02    || description
AS200 ||   01    || description
AS300 ||   01    || description
AS300 ||   01    || description

我想选择所有具有相同产品和多个版本的产品。在上表中,此查询将返回:

AS100 - 01 - description
AS100 - 02 - description

我尝试使用HAVING声明,但我没有得到上述结果..

例如,我试过这个:

SELECT code, version, Count(*) FROM INVENTORY
GROUP BY version
HAVING Count(*) =1

但它会返回出现一次的所有代码。

我在这里创建了一个SQLFIDDLE(我希望它会播放,有时页面会冻结) 我的数据库的小转储

CREATE TABLE "INVENTORY" (
    "code" VARCHAR, 
    "version" VARCHAR,
    "description" VARCHAR
)


INSERT INTO INVENTORY (code, version, description) VALUES("AS100", "01", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS100", "02", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS100", "02", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS100", "02", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS200", "02", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS300", "01", "description");
INSERT INTO INVENTORY (code, version, description) VALUES("AS300", "01", "description");

1 个答案:

答案 0 :(得分:2)

也许这就是你想要的?

select *, count(*) from (select * from INVENTORY group by code, version)
group by code
having count(*)>1

也就是说,首先根据感兴趣的两列创建一个表,然后从该表中选择至少有两个不同的代码值的行。