得到了下面的表结构。
表1
ServiceID Activity_type Start_date End_date
1 Long Day Care 12/03/2012 12/03/2020
1 Family Day Care 12/03/2012 12/03/2020
2 Vacation Care 12/05/2012 12/03/2020
2 Before School Care 12/05/2012 12/03/2020
3 Long Day Care 12/09/2012 12/03/2020
3 Vacation Care 12/09/2012 12/03/2020
3 After School Care 12/09/2012 12/03/2020
现在我想在服务没有活动时显示空白Activity_type
,如获取所有不同的Activity_type
,如果服务没有该活动,则显示{{1}的记录并且空白ServiceId , Start_date, End_Date
。我想要每个服务的总行数=不同活动类型的总计数。
输出应如下所示。对于每个服务有五行,因为不同活动类型的总计数是5。
Activity_type
任何帮助???
答案 0 :(得分:1)
我确信它可以以更有效的方式制作,但最简单的方法应该是在ServiceID
和Activity_Type
之间制作笛卡尔积,以获得所有组合,然后{{ 1}}到数据表以获取实际存在的值。
在TSQL中,那将是;
LEFT JOIN
唯一真正依赖于RDBMS的部分是SELECT s.ServiceID, ISNULL(t.Activity_Type,'') Activity_Type,
s.Start_date, s.End_date
FROM (SELECT DISTINCT ServiceID,Start_date, End_date FROM Table1) s
JOIN (SELECT DISTINCT Activity_Type FROM Table1) a
ON 1=1
LEFT JOIN Table1 t
ON s.ServiceID = t.ServiceID
AND a.Activity_Type = t.Activity_Type
ORDER BY ServiceID, Activity_Type DESC
,例如在MySQL中称为ISNULL
。
答案 1 :(得分:0)
如果将Activity_type列定义为允许null
值,则可以在执行INSERT
时跳过该值。例如,在MySQL中:
INSERT INTO table1 (ServiceID, Start_date, End_date) values (1, '2012-12-03', '2020-12-03');
其他数据库可能具有稍微不同的默认格式来指定日期,但这个想法应该是相同的。