0

当我只选择 COLUMN_1 时,我会在数据库中获得正确数量的 8 行,因为它不会给我重复的行并且它是我想要的

SELECT DISTINCT COLUMN_1
FROM TABLE
WHERE COLUMN_3=12;

但是当同时选择 COLUMN_1, COLUMN_2 时,我的数据库中有 53 行,这不是我想要的......

SELECT DISTINCT COLUMN_1,COLUMN_2
FROM TABLE
WHERE COLUMN_3=12;

我知道当我用 选择两列时distinct,它会给我两列组合的唯一值。DISTINCT应用于列的组合,而不仅仅是第一列。所以我的问题是我如何选择两者COLUMN_1COLUMN_2以便它们给我 8 行并且没有重复????因为一旦我添加COLUMN_2它就会提供更多我应该拥有的行..

4

2 回答 2

4

你必须决定你想要价值。column_2

一种简单的方法是group by

SELECT COLUMN_1, min(COLUMN_2)
FROM TABLE
WHERE COLUMN_3=12
GROUP BY COLUMN_1;
于 2013-09-13T18:24:35.077 回答
1

我对您的确切要求并不完全清楚,但这里一个很好的解决方案可能是使用一些聚合函数之王来防止重复但仍然返回导致重复的列中的所有值,例如

以下数据,

COLUMN1 | COLUMN2
-----------------
a       | x
b       | x
c       | y
a       | z
b       | y
a       | y

将显示为,

COLUMN1 | COLUMN2
-----------------
a       | x,z,y
b       | x,y
c       | y

您没有指定您正在使用的数据库,但在 Oracle 中,您可以使用LISTAGG函数,在您的情况下可能类似于以下内容:

SELECT COLUMN1,
       LISTAGG(COLUMN2, ',') WITHIN GROUP (ORDER BY COLUMN2) "COLUMN2_VALUES",
  FROM TABLE

如果您没有使用 Oracle,这听起来像是一个合适的解决方案,那么值得检查您选择的 RDBMS 是否提供了类似的东西。

于 2013-09-13T19:04:37.697 回答