当我选择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_1
和COLUMN_2
这样他们给我8行而没有重复?因为只要我添加COLUMN_2
它就会提供更多我应该拥有的行..
答案 0 :(得分:4)
您必须决定您想要的column_2
的值。
一种简单的方法是group by
:
SELECT COLUMN_1, min(COLUMN_2)
FROM TABLE
WHERE COLUMN_3=12
GROUP BY COLUMN_1;
答案 1 :(得分: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是否提供类似的东西。