Select 条记录在一列中具有相同的值而在另一列中具有不同的值
Select records that have same value in a column and different in another
在我的 table INVENTORY
中有 3 列 varchar
代码、版本、描述。
例如
code || version || description
--------------------------
AS100 || 01 || description
AS100 || 02 || description
AS100 || 02 || description
AS100 || 02 || description
AS200 || 01 || description
AS300 || 01 || description
AS300 || 01 || description
我想 select 所有具有相同产品和多个版本的产品。在上面的 table 中,此查询将返回:
AS100
- 01
- description
AS100
- 02
- description
我尝试使用 HAVING
语句但是我没有得到上面的结果..
例如,我试过这个:
SELECT code, version, Count(*) FROM INVENTORY
GROUP BY version
HAVING Count(*) =1
但它returns所有出现一次的代码。
我在这里创建了一个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");
也许这就是你想要的?
select *, count(*) from (select * from INVENTORY group by code, version)
group by code
having count(*)>1
也就是首先对感兴趣的两列做一个table聚合,然后从这个table中选择至少有两个不同值code的行.
在我的 table INVENTORY
中有 3 列 varchar
代码、版本、描述。
例如
code || version || description
--------------------------
AS100 || 01 || description
AS100 || 02 || description
AS100 || 02 || description
AS100 || 02 || description
AS200 || 01 || description
AS300 || 01 || description
AS300 || 01 || description
我想 select 所有具有相同产品和多个版本的产品。在上面的 table 中,此查询将返回:
AS100
- 01
- description
AS100
- 02
- description
我尝试使用 HAVING
语句但是我没有得到上面的结果..
例如,我试过这个:
SELECT code, version, Count(*) FROM INVENTORY
GROUP BY version
HAVING Count(*) =1
但它returns所有出现一次的代码。
我在这里创建了一个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");
也许这就是你想要的?
select *, count(*) from (select * from INVENTORY group by code, version)
group by code
having count(*)>1
也就是首先对感兴趣的两列做一个table聚合,然后从这个table中选择至少有两个不同值code的行.