【发布时间】:2021-10-12 06:58:44
【问题描述】:
我有一个来自下面这样的查询的结果集
| Court_id | from | to | Available |
|---|---|---|---|
| 7 | 6:00:00 | 7:00:00 | Yes |
| 7 | 7:00:00 | 8:00:00 | No |
| 7 | 8:00:00 | 9:00:00 | Yes |
| 8 | 6:00:00 | 7:00:00 | Yes |
| 8 | 7:00:00 | 8:00:00 | Yes |
| 8 | 8:00:00 | 9:00:00 | No |
| 9 | 6:00:00 | 7:00:00 | Yes |
| 9 | 7:00:00 | 8:00:00 | Yes |
| 9 | 8:00:00 | 9:00:00 | No |
如何从上面的结果中按列实现如下?
| from | to | 7 | 8 | 9 |
|---|---|---|---|---|
| 6:00:00 | 7:00:00 | Yes | Yes | Yes |
| 7:00:00 | 8:00:00 | no | Yes | Yes |
| 8:00:00 | 9:00:00 | Yes | no | no |
Court_id 可以不时更改。
我尝试了以下方法
CREATE TABLE [testslots](
[Court_id] [int] NULL,
[from] [nvarchar](10) NULL,
[to] [nvarchar](10) NULL,
[Available] [nvarchar](10) NULL);
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (7,'6AM','7AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (7,'7AM','8AM','no');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (7,'8AM','9AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (8,'6AM','7AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (8,'7AM','8AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (8,'8AM','9AM','no');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (9,'6AM','7AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (9,'7AM','8AM','Yes');
INSERT INTO [testslots] ([Court_id] ,[from] ,[to] ,[Available])VALUES (9,'8AM','9AM','no');
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Court_id)
FROM [testslots] c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT [from],[to], ' + @cols + ' from
(
select [from]
, [to]
, [available]
from testslots
) x
pivot
(
max([available])
for available in (' + @cols + ')
) p '
exec sp_executesql @query;
【问题讨论】:
标签: sql sql-server database pivot