我有一个样本表如下。
ID Name Code Address
----+---------------+--------+----------------
1 | Sydney Hall | SH | 11 Abc Street
2 | Sydney Hall | SH | 23 Abc Street
3 | Main Hall | MH | 74 Xyz Street
4 | Odyssey Hall | OH | 133 AbZ Street
5 | Odyssey Hall | OH | 28 Xyx Street
我想为这些不同的条目选择不同的代码条目以及ID和名称。对于上表,我想得到以下内容(所以我忽略了建筑地址)。
ID Name Code
----+---------------+--------+
1 | Sydney Hall | SH
3 | Main Hall | MH
4 | Odyssey Hall | OH
它可能是一个左连接,但我似乎无法将它正确地放在一起(特别是因为我从同一个表中选择数据)。有没有人对此有所了解? 感谢。
答案 0 :(得分:4)
我看到每个人都已经回答了这个问题,但为什么这么复杂呢?
SELECT
MIN(ID) ID,
MIN(NAME) NAME,
CODE
FROM TABLE
GROUP BY CODE
答案 1 :(得分:2)
SELECT *
FROM [table_1]
WHERE [ID] IN (SELECT Min([ID])
FROM [table_1]
GROUP BY CODE
)
答案 2 :(得分:2)
我有两种方法可以做到这一点。一种是使用FIRST
聚合函数(documented here)。语法有点令人困惑但它应该完成工作
Select
MIN(ID) keep (dense_rank first order by id) as id,
MIN(NAME) keep (dense_rank first order by id) as name,
CODE
FROM YOUR_TABLE
GROUP BY CODE
我建议的另一种替代方法是使用@techdo建议的ROW_NUMBER
函数,虽然我认为您需要从该答案中删除NAME列,而是使用:
SELECT * FROM(
SELECT
ROW_NUMBER() over (partition by CODE order by ID) RNUM,
ID,
NAME,
CODE
FROM YOUR_TABLE
)x where RNUM=1;
答案 3 :(得分:0)
请尝试:
SELECT * FROM(
SELECT
ROW_NUMBER() over (partition by NAME, CODE order by NAME, CODE) RNUM,
ID,
NAME,
CODE,
ADDRESS
FROM YourTABLE
)x where RNUM=1;
答案 4 :(得分:0)
你也可以使用这个:
SELECT ID, Name, Code
FROM table
WHERE ID IN (SELECT Max(ID)
FROM table
GROUP BY Code
)