SQL Server只加入一条记录

时间:2014-10-31 05:42:04

标签: sql-server join row

如何编写正确的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

我有商店订单列表,必须与地址数据库连接,我不想在同一商店的每一行重复相同的地址

1 个答案:

答案 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
相关问题