如何显示一个包含多行的列值?

时间:2014-01-03 07:29:38

标签: sql vb6

我有一个内部连接表的select查询,输出如下:

ID | StudentID |   Fullname   | Transaction     | Date    | Place
__   _________   ____________   ______________   ________   _____
1    S-001       Smith,James    Dental Checkup   08-21-13   Clinic A
2    S-002       Blake, David   Dental Checkup   09-25-13   Clinic C
3    S-002       Blake, David   Dental Checkup   10-27-13   Clinic C
4    S-002       Blake, David   Dental Checkup   11-27-13   Clinic C
5    S-003       Curtis, An     Dental Checkup   08-15-13   Clinic B
6    S-003       Curtis, An     Dental Checkup   09-15-13   Clinic B

我希望在Visual Basic 6中的报表上显示的只是一个具有多个事务的学生名称,但所有事务都将显示,如下所示:

ID | StudentID |   Fullname   | Transaction     | Date    | Place
__   _________   ____________   ______________   ________   _____
1    S-001       Smith,James    Dental Checkup   08-21-13   Clinic A
2    S-002       Blake, David   Dental Checkup   09-25-13   Clinic C
3                               Dental Checkup   10-27-13   Clinic C
4                               Dental Checkup   11-27-13   Clinic C
5    S-003       Curtis, An     Dental Checkup   08-15-13   Clinic B
6                               Dental Checkup   09-15-13   Clinic B

有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用row_number()中的分区来实现此目的。 见link。并阅读评论部分。

答案 1 :(得分:0)

您的查询应该是这样的:

Select *
from students s
inner join transactions t on t.StudentID = t.StudentID
inner join 
(
    select s.StudentID, count(*)
    from students s
    inner join transactions t on t.StudentID = t.StudentID
    group by s.StudentID
    having count(*) > 1
) ms on ms.StudentID = s.StudentID

名为“ms”的内部联接仅包括具有多于1个事务的学生,因此会将结果集限制为您想要的结果。然后你如何显示它们是一个不同的问题:没有多少网格能够显示空白而不是列中的重复值,正如你已经使用StudentID和FullName显示的那样,所以你可能需要做额外的工作来获得这种效果,如果它是绝对需要。 (如果不是绝对必要的话,我会尽量避免这样做,因为它会变得混乱!)

干杯 -