2013-05-08 59 views
0

得到下面的表结构。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如果服务没有这样的活动,则显示与ServiceId , Start_date, End_Date记录和一个空白Activity_type。我希望每个服务的总行数=不同的活动类型的总数。

输出应该如下所示。每个服务有五行,不同活动类型的总计数是5。

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 
1        12/03/2012 12/03/2020 
1        12/03/2012 12/03/2020 
1        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 
2        12/05/2012 12/03/2020 
2        12/05/2012 12/03/2020 
2        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 
3        12/09/2012 12/03/2020 
3        12/09/2012 12/03/2020 

任何帮助?

回答

1

我敢肯定,它可以在一个更有效的方式进行,但最简单的方法应该是让ServiceIDActivity_Type之间的笛卡尔乘积得到所有组合,然后LEFT JOIN到数据表来获取值实际上存在。

在TSQL中,这将是;

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 

唯一真正的RDBMS依赖的部分是ISNULL,对于例如在MySQL被称为IFNULL

An SQLfiddle to test with

0

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

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

其它数据库可能略有不同默认格式指定日期,但这个想法应该是一样的。

+0

再次阅读该问题。 – Maximus 2013-05-08 04:42:18

+0

@Sivakumar:这不是最清楚的问题,并且不是很明显涉及多个表格。我决定回答对这个问题的最简单的解释,以防事实证明这是OP所要求的。 – 2013-05-08 04:45:09