2017-08-17 71 views
0

我有一个SQL问题。我有两张表,tableA有4条记录,tableB现在有0条记录,但是会有200条以上的记录。我想知道如果tableB在200条记录下是否有隐藏tableA的最后两条记录?SQL根据另一个表的行数隐藏/显示行

我走到这一步,是非常简单的

SELECT 
    id, dateSlot, timeSlot 
FROM 
    tableA a 
INNER JOIN 
    tableB b ON a.id = b.dateTimeSlotId; 

我只是不知道如何隐藏基于另一个表的总记录数的记录。

任何人都可以帮忙吗?

+0

你是什么意思隐藏? “最后两条记录”是什么意思? SQL中的表格表示*无序*集合。没有最后两行这样的东西。 –

+0

因此,在tableB中这些少于200行的行中,tableA中的每行至少有一个匹配项? –

+1

我可以考虑一个可能回答你的问题的查询,但你应该通过样本数据告诉我们你的意思。正如@gordon所说,你需要知道'tableA'中的哪一列定义了一个排序,以便你可以引用该表的最后2条记录。 –

回答

0

这只是一个想法。如果表格不对称,则需要改进逻辑。

declare @tableA table (id int) 
declare @tableB table (dateTimeSlotId int , dateSlot date, timeSlot time) 

insert @tableA values (1),(2),(3),(4),(5),(6),(7) 
insert @tableB values 
(1,'20170801', '00:00'), 
(2,'20170802', '00:01'), 
(3,'20170803', '00:02'), 
(4,'20170804', '00:03'), 
(5,'20170805', '00:04'), 
(6,'20170806', '00:05'), 
(7,'20170807', '00:06') 

;with cte as(
SELECT ROW_NUMBER() over (order by id) rNumber, id, dateSlot, timeSlot 
FROM @tableA a INNER JOIN 
    @tableB b 
     ON a.id = b.dateTimeSlotId) 
SELECT id, dateSlot, timeSlot 
FROM cte where rNumber <= (SELECT case when Count(1) >= 200 then Count(1) -2 else Count(1) end from @tableB)