3

基本上我有2张桌子。让我们说A和B。

A 具有 id(PK)、pin、name、address 等列

id(PK)  pin             name    address
1        aaa-111-aaa    AAA ------
2        bbb-222-bbb    BBB ------
3        ccc-333-ccc    CCC --------

B 有 appName、apprequestTime、appAccectTime、id(FK) 等列。

appName apprequestTime  appAccectTime    id(FK).
LLL          2012-4-01  2012-4-01    1
NNN          2012-4-08  2012-5-01    2
QQQ          2012-4-05  2012-4-01    1
MMM          2012-4-02  2012-4-02    2
PPP          2012-5-01  2012-5-01    1

B表中可以有多个id行,因为它是外键。

现在,问题是我正在尝试获取某个 apprequestTime 的一个引脚的所有记录。

我正在尝试内部连接,但由于表 B 中的 id,它显示了 pin。

pin         apprequestTime
aaa-111-aaa     2012-4-01
aaa-111-aaa     2012-4-05
bbb-222-bbb     2012-4-08
bbb-222-bbb     2012-4-02

但我期待的结果应该是:

pin            apprequestTime
aaa-111-aaa    2012-4-01
               2012-4-05
bbb-222-bbb    2012-4-08
               2012-4-02

任何人都可以帮助:)

4

1 回答 1

4

在 SQL Server 2005+ 中,您可以使用row_number()这种类型的请求:

;with cte as
(
  select a.pin, b.apprequestTime,
    row_number() over(partition by a.pin 
                      order by b.apprequestTime) rn
  from tablea a
  inner join tableb b
    on a.id = b.id
) 
select case when rn = 1 then pin else '' end pin, 
  apprequestTime
from cte;

请参阅带有演示的 SQL Fiddle

或没有 CTE:

select case when rn = 1 then pin else '' end pin, 
  apprequestTime
from 
(
  select a.pin, b.apprequestTime,
    row_number() over(partition by a.pin 
                      order by b.apprequestTime) rn
  from tablea a
  inner join tableb b
    on a.id = b.id
) t1

请参阅带有演示的 SQL Fiddle

于 2012-10-24T13:56:05.160 回答