如何编写正确的SQL以仅返回第一个连接的行其他NULL
I have SQL server JOIN Desired
T1 T2 T3 T3
A A AAAA A AAAA A AAAA
A B BBBB A AAAA A
A C CCCC A AAAA A
A D DDDD A AAAA A
我的存储过程中的SQL字符串
SELECT OQ.*,
SitesS.Siteaddress STOREADR
FROM @OQ OQ, dbo.Sites SitesS
WHERE OQ.STORE = SitesS.Sitenumber
我有商店订单列表,必须与地址数据库连接,我不想在同一商店的每一行重复相同的地址
答案 0 :(得分:1)
你想要达到的目标相当奇怪。
鉴于您的输入是:
DECLARE @T1 TABLE (id VARCHAR(10))
DECLARE @T2 TABLE (id VARCHAR(10), address VARCHAR(20))
INSERT @T1 VALUES
('A'),
('A'),
('A'),
('A'),
('B'),
('B')
INSERT @T2 VALUES
('A', 'AAAA'),
('B', 'BBBB'),
('C', 'CCCC'),
('D', 'DDDD')
以下查询:
SELECT id, CASE WHEN rowNum = 1 THEN address
WHEN rowNum > 1 THEN NULL
END
FROM (
SELECT t1.id, t2.address,
ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t1.id) AS rowNum
FROM @T1 AS t1
INNER JOIN @T2 AS t2 ON t1.id = t2.id) t
产生此输出:
id address
------------
A AAAA
A NULL
A NULL
A NULL
B BBBB
B NULL