sql 表连接后数据去除重复的内容

有个A表
订单号 入住人
1 张1
1 王1
2 张2
3 张3
有个B表
订单号 入住房间号
1 201
1 202
两个表的订单号是相同的

现在想得到表
订单号 入住人 房间号
1 张1 201
1 王1 202
2 张2 null
3 张3 null

请问改如何写

关键问题是你的订单号比如1,入住了两个人,分别开了两个房间,但问题是哪个人是201房间,哪个人是202房间没有对应。这个人和房间的对应关系是怎样的?

这是同一个订单一一对应分配的事吧,不是去重的问题
参见
http://blog.csdn.net/danielinbiti/article/details/43231879

select * from 表A A1 left join 表B B1 on A1.订单号=B1.订单号 这样就可以得到你想要的数据了

WITH A(ddh,name)AS(
SELECT 1,'张1' UNION ALL
SELECT 1,'王1' UNION ALL
SELECT 2,'张2' UNION ALL
SELECT 3,'张3'
),
B(ddh,fjh)AS(
SELECT 1,'201' UNION ALL
SELECT 1,'202'
)

select * from
(
select ,ROW_NUMBER() over(partition by ddh,fjh order by fjh) as id from
(select A.
,B.fjh from A left join B on a.ddh=b.ddh) as table1
) as table2 where id=1

你试试看,应该是你要的结果。

去除重复的话,用distinct就行了

我的实现方法 提供个大家参考,不是最好的,只提供一种思路

谢谢那些帮助我的人

DECLARE @A TABLE (orderid INT , NAME VARCHAR(30))
INSERT INTO @A
( orderid, NAME )
VALUES ( 1, -- orderid - int
'张1' -- NAME - varchar(30)
)
,( 1, -- orderid - int
'王1' -- NAME - varchar(30)
)
,( 2, -- orderid - int
'张2' -- NAME - varchar(30)
)
,( 3, -- orderid - int
'张3' -- NAME - varchar(30)
) ,( 1, -- orderid - int
'李1' -- NAME - varchar(30)
)

DECLARE @B TABLE (orderid INT , host VARCHAR(30))

INSERT INTO @B
( orderid, host )
VALUES ( 1, -- orderid - int
'201' -- host - varchar(30)
)

,(1, -- orderid - int
'202' -- host - varchar(30)
)

,(1, -- orderid - int
'203' -- host - varchar(30)
)

      SELECT * FROM @A

      SELECT * FROM @B

      -- DROP TABLE #temp
      SELECT * INTO #temp FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY A.orderid) id,A.orderid,A.NAME , b.host FROM @A  A LEFT JOIN  @B B  ON A.orderid = B.orderid  
      ) T  

      SELECT * FROM #temp

      SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY host)  nameid, ROW_NUMBER() OVER (PARTITION BY host ORDER BY NAME)  hostid, * INTO #temp2 FROM #temp   

      SELECT NAME,host ,orderid FROM #temp2 WHERE nameid = hostid  AND host IS NOT NULL
      UNION ALL
      SELECT  NAME,host ,orderid FROM #temp2 WHERE host IS NULL