Sql server 对于本例,如何在SQL SERVER中添加空行?
我有以下表格结构:Sql server 对于本例,如何在SQL SERVER中添加空行?,sql-server,sql-server-2012,days,Sql Server,Sql Server 2012,Days,我有以下表格结构: CREATE TABLE Schedule ([Day] varchar(13), [Starts] varchar(57), [Ends] varchar(57)) ; INSERT INTO Schedule ([Day], [Starts], [Ends]) VALUES ('2', '09:00', '15:00'), ('5', '10:00', '12:00'), ('3', '09:00', '18:00') ; 下
CREATE TABLE Schedule
([Day] varchar(13), [Starts] varchar(57), [Ends] varchar(57))
;
INSERT INTO Schedule
([Day], [Starts], [Ends])
VALUES
('2', '09:00', '15:00'),
('5', '10:00', '12:00'),
('3', '09:00', '18:00')
;
下面是显示当前行的简单查询:
SELECT
DATENAME(weekday, Day - 1) as days,
Starts,
Ends
FROM
Schedule
order by Day
最后一个查询将获得以下结果:
Day Starts Ends
--- ------- ----
Tuesday 09:00 15:00
Wednesday 09:00 18:00
Friday 10:00 12:00
我想把登记册上没有的日期填在表格里
这是我想要得到的最终结果:
Day Starts Ends
--- ------- ----
Monday NULL NULL
Tuesday 09:00 15:00
Wednesday 09:00 18:00
Thursday NULL NULL
Friday 10:00 12:00
我怎样才能得到这个?谢谢,我将创建一个empy基表并进行左联接:
CREATE TABLE Schedule
(Day VARCHAR(13), Starts VARCHAR(57), Ends VARCHAR(57));
INSERT INTO Schedule (Day, Starts,Ends)
VALUES
('2', '09:00','15:00'),
('5', '10:00','12:00'),
('3', '09:00','18:00');
CREATE TABLE ScheduleBase
(Day VARCHAR(13), Starts VARCHAR(57), Ends VARCHAR(57));
INSERT INTO ScheduleBase
(Day, Starts, Ends)
VALUES
('1', NULL, NULL),
('2', NULL, NULL),
('3', NULL, NULL),
('4', NULL, NULL),
('5', NULL, NULL)
SELECT SB.Day, S.Starts, S.Ends FROM ScheduleBase AS SB LEFT JOIN Schedule
AS S ON SB.Day = S.Day
我将创建一个empy基表并执行左联接:
CREATE TABLE Schedule
(Day VARCHAR(13), Starts VARCHAR(57), Ends VARCHAR(57));
INSERT INTO Schedule (Day, Starts,Ends)
VALUES
('2', '09:00','15:00'),
('5', '10:00','12:00'),
('3', '09:00','18:00');
CREATE TABLE ScheduleBase
(Day VARCHAR(13), Starts VARCHAR(57), Ends VARCHAR(57));
INSERT INTO ScheduleBase
(Day, Starts, Ends)
VALUES
('1', NULL, NULL),
('2', NULL, NULL),
('3', NULL, NULL),
('4', NULL, NULL),
('5', NULL, NULL)
SELECT SB.Day, S.Starts, S.Ends FROM ScheduleBase AS SB LEFT JOIN Schedule
AS S ON SB.Day = S.Day
如果不想创建新表,可以使用此选项
select
DATENAME(weekday, Day - 1) as days, max(Starts), max(Ends)
from (
SELECT
Day, Starts, Ends
FROM
Schedule
union all
select
*, null, null
from (values (1),(2),(3),(4),(5),(6),(7)) t(d)
) t
group by Day
如果不想创建新表,可以使用此选项
select
DATENAME(weekday, Day - 1) as days, max(Starts), max(Ends)
from (
SELECT
Day, Starts, Ends
FROM
Schedule
union all
select
*, null, null
from (values (1),(2),(3),(4),(5),(6),(7)) t(d)
) t
group by Day
您可以使用公共表expressin动态生成周日历表:
with range (num) as (
select 1 union all select 2 union all select 3
union all select 4 union all select 5 union all select 6
union all select 7
)
SELECT
DATENAME(weekday, range.num - 1),
Starts,
Ends
FROM
Schedule
right outer join range on range.num = Schedule.day
order by range.num
您可以使用公共表expressin动态生成周日历表:
with range (num) as (
select 1 union all select 2 union all select 3
union all select 4 union all select 5 union all select 6
union all select 7
)
SELECT
DATENAME(weekday, range.num - 1),
Starts,
Ends
FROM
Schedule
right outer join range on range.num = Schedule.day
order by range.num
或者,为天创建一个引用表,然后右键连接到select查询
SELECT DATENAME(WEEKDAY, TBL.days - 1) AS days ,
starts ,
ends
FROM ( SELECT Day days ,
Starts ,
Ends
FROM Schedule
) T
RIGHT JOIN ( SELECT [days]
FROM ( SELECT 1 [days]
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
) S
) TBL ON TBL.days = t.days
结果:
days starts ends
------------ --------- ------------
Monday NULL NULL
Tuesday 09:00 15:00
Wednesday 09:00 18:00
Thursday NULL NULL
Friday 10:00 12:00
Saturday NULL NULL
Sunday NULL NULL
(7 row(s) affected)
或者,为天创建一个引用表,然后右键连接到select查询
SELECT DATENAME(WEEKDAY, TBL.days - 1) AS days ,
starts ,
ends
FROM ( SELECT Day days ,
Starts ,
Ends
FROM Schedule
) T
RIGHT JOIN ( SELECT [days]
FROM ( SELECT 1 [days]
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
) S
) TBL ON TBL.days = t.days
结果:
days starts ends
------------ --------- ------------
Monday NULL NULL
Tuesday 09:00 15:00
Wednesday 09:00 18:00
Thursday NULL NULL
Friday 10:00 12:00
Saturday NULL NULL
Sunday NULL NULL
(7 row(s) affected)
这可能只适用于一周,但如果超过一周呢?在这种情况下,我总是有这样的日程结构,所以我不必担心超过一周。这一天代表什么?实际的星期几?就像@Tanner说的,如果超过一周呢?我会制作一个名为weekdays的表,将您的工作日放在其中,然后左键连接到您的日程表。如果计划中有空天,左联接将添加空行。但是,这仍然不能解决将表ID用作一周中的一天这一明显问题。这可能只适用于一周,但如果超过一周呢?在这种情况下,我始终使用此时间表结构,因此我不必担心超过一周的问题。天代表什么?实际的星期几?就像@Tanner说的,如果超过一周呢?我会制作一个名为weekdays的表,将您的工作日放在其中,然后左键连接到您的日程表。如果计划中有空天,左联接将添加空行。但这仍然无助于解决将表ID用作一周中的一天这一明显问题。您的答案非常适合我需要的,谢谢:-您的答案非常适合我需要的,谢谢:-