-1

我正在尝试从其中一列是唯一的表中选择几列。选择语句看起来像这样:

select a, distinct b, c, d  
from mytable

该表如下所示:

| a | b | c | d | e |...  
|---|---|---|---|---|   
| 1 | 2 | 3 | 4 | 5  
| 1 | 2 | 3 | 4 | 6  
| 2 | 5 | 7 | 1 | 9  
| 7 | 3 | 8 | 6 | 4  
| 7 | 3 | 8 | 6 | 7  

所以查询应该返回如下内容:

| a | b | c | d |  
|---|---|---|---|  
| 1 | 2 | 3 | 4  
| 2 | 5 | 7 | 1  
| 7 | 3 | 8 | 6  

我只想删除 b 重复的所有行。

编辑:在 b 值重复的情况下,我想选择哪一行似乎有些混乱。我不在乎,因为 a、c 和 d应该(但不保证)是相同的。

4

6 回答 6

3

尝试这个

    SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY b ORDER BY a) NO
,* FROM TableName) AS T1 WHERE NO = 1
于 2013-09-11T15:27:57.657 回答
0

您还没有说如何为每个 b 值选择一行,但这将为每个选择一个。

Select
    a,
    b,
    c,
    d,
    e
From (
    Select
        a,
        b,
        c,
        d,
        e,
        row_number() over (partition by b order by b) rn
    From
        mytable
    ) x
Where
    x.rn = 1
于 2013-09-11T15:25:48.497 回答
0

我认为您几乎可以DISTINCT尝试:

SELECT DISTINCT a, b, c, d
FROM myTable
于 2013-09-11T15:29:16.400 回答
0

您不能放在DISTINCT单个列上。你应该把它放在后面SELECT

SELECT DISTINCT a, b, c, d
FROM mytable

它返回样本表所需的结果。但是,如果您只需要从单个列中删除重复项(这是不可能的),您可能误解了一些东西。给我们更多的描述和样品,我们会努力引导您走向正确的方向。

于 2013-09-11T15:29:18.807 回答
0

如果您不在乎获得BCD和的值E,只要它们适合该键,您可以按以下方式分组A

 SELECT A, MIN(B), MIN(C), MIN(D), MIN(E)
 FROM MyTable
 GROUP BY A

请注意,MAX()这同样有效。一些 RDBMS 支持FIRST()聚合或类似的,正是在这些情况下,您不关心您(从特定人群)获得的价值。

于 2013-09-11T15:32:35.787 回答
0

这将返回您要查找的内容,但我认为您的示例存在缺陷,因为您无法确定e返回列中的哪个值。

Create Table A1 (a int, b int, c int, d int, e int)

INSERT INTO A1 (a,b,c,d,e) VALUES (1,2,3,4,5)
INSERT INTO A1 (a,b,c,d,e) VALUES (1,2,3,4,6)
INSERT INTO A1 (a,b,c,d,e) VALUES (2,5,7,1,9)
INSERT INTO A1 (a,b,c,d,e) VALUES (7,3,8,6,4)
INSERT INTO A1 (a,b,c,d,e) VALUES (7,3,8,6,7)

SELECT * FROM A1

SELECT  a,b,c,d
FROM
(
    SELECT ROW_NUMBER() OVER (PARTITION BY b ORDER BY a) RowNum ,* 
    FROM A1 
) As InnerQuery WHERE RowNum = 1
于 2013-09-11T15:33:16.147 回答