我有表T1
ID STATUS
1 NEW
2 CLOSED
3 NEW
我有表T2
ID OWNER
1 A
1 B
1 C
1 A
1 B
2 A
2 B
2 A
3 A
我想加入T1和T2,并为每个不同的ID和每个不同的OWNER提供多行。如果OWNER在T2中重复多次,应该被忽略,并且应该删除重复项。
所以最终的期望结果应该是:
ID STATUS OWNER
1 NEW A
1 NEW B
1 NEW C
2 CLOSED A
2 CLOSED B
3 NEW A
因此,您可以看到应删除重复项(多次使用相同ID的相同所有者)。我只需要输出作为ID的列表以及该ID的每个不同的OWNER,但是在T2表中他负责的次数并不重要。我需要以某种方式区分。
如果我像这样进行查询,我没有得到每个ID和OWNER的不同值,但在这种情况下我也有重复。
select t1.id,t1.status,t2.owner
FROM t1
join t2
on t1.id=t2.id
提前谢谢
答案 0 :(得分:8)
如果我理解正确,你需要这个:
select T1.ID, T1.STATUS, t.OWNER from T1
inner join(
select ID, OWNER from T2 group by ID, OWNER
) t
on T1.ID = t.ID
答案 1 :(得分:2)
您可以在ur查询中使用distinct keyward来获得所需的结果。
select distinct t1.id,t1.status,t2.owner
FROM t1
join t2
on t1.id=t2.id
答案 2 :(得分:0)
with T2b as (
select * from (
select t2.*, rownumber() over(partition by t2.ID, t2.OWNER ) rang
from t2
) tmp
where rang=1
)
select t1.*, T2b.OWNER
from t1 inner join T2b on t1.id=T2b.id
答案 3 :(得分:0)
总而言之,很可口。
create table #T1 ([ID] int, [Status] varchar(50))
INSERT INTO #T1 VALUES
(1, 'NEW'),
(2, 'CLOSED'),
(3, 'NEW')
create table #T2 ([ID] int, [Owner] varchar(50))
INSERT INTO #T2 VALUES
(1, 'A'),
(1, 'B'),
(1, 'C'),
(1, 'A'),
(1, 'B'),
(2, 'A'),
(2, 'B'),
(2, 'A'),
(3, 'A')
SELECT DISTINCT
T.[ID],
T.[Status],
U.[Owner]
FROM #T1 T
JOIN #T2 U ON T.[ID] = U.[ID]
我在SSMS的SQL Server中完成了工作,但是几乎所有与SQL兼容的引擎都可以毫无问题地完成这项工作。
抱歉,我认为在示例中可能会学习到独特的减少行的课程,但是只有DISTINCT可以完成所有工作。