SQL查询 - 为少数列添加空白数据

时间:2013-05-08 04:03:21

标签: sql

得到了下面的表结构。

表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

任何帮助???

2 个答案:

答案 0 :(得分:1)

我确信它可以以更有效的方式制作,但最简单的方法应该是在ServiceIDActivity_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

An SQLfiddle to test with

答案 1 :(得分:0)

如果将Activity_type列定义为允许null值,则可以在执行INSERT时跳过该值。例如,在MySQL中:

INSERT INTO table1 (ServiceID, Start_date, End_date) values (1, '2012-12-03', '2020-12-03');

其他数据库可能具有稍微不同的默认格式来指定日期,但这个想法应该是相同的。