尝试选择多个列,其中一列是唯一的

时间:2013-09-11 15:22:58

标签: sql sql-server sql-server-2005

我正在尝试从其中一列唯一的表中选择多个列。 select语句如下所示:

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 (但不保证)是相同的。

6 个答案:

答案 0 :(得分:3)

试试这个

    SELECT * FROM (SELECT ROW_NUMBER() OVER (PARTITION BY b ORDER BY a) NO
,* FROM TableName) AS T1 WHERE NO = 1

答案 1 :(得分: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

答案 2 :(得分:0)

我认为你几乎与DISTINCT尝试:

SELECT DISTINCT a, b, c, d
FROM myTable

答案 3 :(得分:0)

您不能将DISTINCT放在一列上。你应该在SELECT

之后把它放好
SELECT DISTINCT a, b, c, d
FROM mytable

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

答案 4 :(得分:0)

如果您不关心 BCDE值,只要他们“适合该密钥,您可以按A分组:

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

请注意,MAX()同样有效。有些RDBMS支持FIRST()聚合或类似的聚合,对于这些情况,你不关心你得到的价值(来自特定人群)。

答案 5 :(得分: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