我正在尝试执行 PIVOT 但出现错误。我正在尝试查看哪些患者接受了多次间隔治疗。该列是文本类型。我尝试在查询中将列类型转换为 VARCHAR(MAX) 但仍然收到错误。
这是我的代码:
SELECT patientname, IntervalName1, IntervalName2, IntervalName3
FROM (SELECT DISTINCT
patientname,
CAST(IntervalName AS VARCHAR(MAX)),
'IntervalName' +
CAST(ROW_NUMBER() OVER
(PARTITION BY patientname
ORDER BY patientname) AS VARCHAR(10)) AS ColumnSequence
FROM vwPatientPEIOutcomes
WHERE [ vwPatientPEIOutcomes.DueDate = daterange ]
GROUP BY patientname, IntervalName
ORDER BY patientname, ColumnSequence) Temp
PIVOT(
MAX(patientname) FOR
ColumnSequence IN ( IntervalName1, IntervalName2, IntervalName3 )
) tb2
以下是我针对您的答案进行的第二组编辑。我对此很陌生,所以花了一些时间来弄清楚需要什么:
谢谢你的回答。我使用 group by 是因为 row_number 正在创建重复项,而且我不知道如何才能不发生这种情况。
患者姓名和间隔名称都是数据库中的字符串。间隔名称是一个字段,表示他们是否在给定时间范围内接受了调查问卷。我正在尝试为每个患者创建一行。
这是数据集:
CREATE TABLE vwPatientPEIOutcomes (
patientname varchar(max) NOT NULL,
intervalname varchar(max) NOT NULL,
) ;
INSERT INTO vwpatientPEIOutcomes (patientname,intervalname)
VALUES
('Patient 1','End'),
('Patient 2','Start'),
('Patient 3','Start'),
('Patient 4','End'),
('Patient 4','6-Month'),
('Patient 4','Start'),
('Patient 5','6-Month'),
('Patient 6','Start'),
('Patient 6','End'),
('Patient 7','6-Month');
我正在尝试得到这个结果:
patientname |
Intervalname1 |
Intervalname2 |
Intervalname3 |
Patient 1 |
End |
|
|
Patient 2 |
Start |
|
|
Patient 3 |
Start |
|
|
Patient 4 |
End |
6-Month |
Start |
Patient 5 |
6-Month |
|
|
Patient 6 |
End |
Start |
|
Patient 7 |
6-Month |
|
|