在SQL Server 2008 R2

时间:2015-04-29 17:19:52

标签: sql-server sql-server-2008-r2 pivot

我需要创建一个基于一系列SQL子查询生成的数据集。可以使用以下代码复制子查询的结果:

CREATE TABLE Table1
    (`StayID` varchar(3), `IncidentOrder` int, `TxDetails` varchar(73))
;

INSERT INTO Table1
    (`StayID`, `IncidentOrder`, `TxDetails`)
VALUES
    ('IP1', 1, 'Ward: A9999 - 01/01/2015 - 15:23'),
    ('IP1', 2, 'Consultant: Joe Bloggs Specialty :GERIATRIC MEDICINE - 02/01/2015 - 08:17'),
    ('IP1', 3, 'Discharge - 06/02/2015 - 16:40'),
    ('IP2', 1, 'Consultant: Joe Bloggs - 01/01/2015 - 09:02'),
    ('IP2', 2, 'Consultant: Joe Bloggs Specialty :GERIATRIC MEDICINE - 02/01/2015 - 12:56'),
    ('IP2', 3, 'Ward: A9999 - 02/01/2015 - 19:39'),
    ('IP2', 4, 'Consultant: Joe Bloggs - 05/01/2015 - 08:22'),
    ('IP3', 1, 'Ward: A9999 - 02/01/2015 - 04:58'),
    ('IP3', 2, 'Consultant: Joe Bloggs Specialty :GASTROENTEROLOGY - 02/01/2015 - 07:27'),
    ('IP3', 3, 'Consultant: Joe Bloggs - 05/01/2015 - 09:06'),
    ('IP3', 4, 'Ward: A9999 Consultant: Joe Bloggs - 05/01/2015 - 16:45'),
    ('IP3', 5, 'Ward: A9999 Consultant: Joe Bloggs - 05/01/2015 - 17:10'),
    ('IP3', 6, 'Ward: A9999 - 05/01/2015 - 18:14')
;

我需要产生如下结果:

列:StayID,Tx1,Tx2,Tx3,Tx。,Txn

为每个匹配的StayID和Txn列填充TransferDetails(基于IncidentOrder)。

IncidentOrder不是固定的,对于数据集中的每个StayID可能是10,30或1,因此静态数据透视不是一个选项。

我已尝试(并且失败)使用PIVOT生成所需的输出,并希望有人可以提供帮助。

提前致谢

1 个答案:

答案 0 :(得分:0)

你有无数的事件吗? 您是否希望您的透视数据只包含实际存在的事件列?

如果您对这两个问题的回答都是“否”,我认为以下查询可能会对您有所帮助。

SELECT 
STAYID,
DECODE(INCIDENTORDER,'1',TxDetails,NULL) AS Tx1,
DECODE(INCIDENTORDER,'2',TxDetails,NULL) AS Tx2,
DECODE(INCIDENTORDER,'3',TxDetails,NULL) AS Tx3,
.
.
DECODE(INCIDENTORDER,'n',TxDetails,NULL) AS Txn
FROM Table1
GROUP BY
STAYID;