0

得到下表结构。

表格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 时显示空白,例如获取所有不同的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

有什么帮助???

4

2 回答 2

1

我确信它可以以更有效的方式制作,但最简单的方法应该是在ServiceID和之间制作笛卡尔积Activity_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.

一个用于测试的 SQLfiddle

于 2013-05-08T04:24:17.527 回答
0

如果 Activity_type 列被定义为允许null值,那么您可以在执行INSERT. 例如,在 MySQL 中:

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

其他数据库用于指定日期的默认格式可能略有不同,但想法应该是相同的。

于 2013-05-08T04:35:01.917 回答