旋转数据或使用交叉表 - 旋转我的 table 中的一列以获得所需的解决方案

Pivot data or use crosstab - pivot one column in my table in order to get desired solution

我正在尝试使用 SQL 服务器来旋转数据集。我还没有找到如何做到这一点的方法。我需要帮助解决这个问题。下面是数据现在的样子。

这是我解决问题所需要的转变。这是旋转归因列并在满足归因逻辑的地方创建 Y 标志。预先感谢您的帮助

您可以使用条件聚合:

select
    PatientNumber,
    Physician,
    max(case when Attribution = 'Consulting' then 'Y' end) Consulting,
    max(case when Attribution = 'Attending'  then 'Y' end) Attending,
    max(case when Attribution = 'Admitting'  then 'Y' end) Admitting
from mytable 
group by PatientNumber, Physician
order by PatientNumber, Physician

您可以将 PIVOT 与 IIF(类似于 CASE)一起使用以获得结果集

DECLARE @patient table(patientNumber int, physician varchar(20), Attribution varchar(30))

insert into @patient
values
(1234 ,'Jim','Consulting'  ),
(1234 ,'seth','Consulting' ),
(1234 ,'john','Referring'  ),
(2345 ,'sally','Attending' ),
(4567 ,'James','Admitting' ),
(3424 ,'jack','Admitting'  ),
(5678 ,'sally','Admitting' ),
(5678 ,'Mike','Consulting' );

SELECT patientNumber, physician, 
iif(consulting = 1, 'Y','') as consulting,
iif(Referring = 1, 'Y','') as Referring,
iif(Attending = 1, 'Y','') as Attending,
iif(Admitting = 1, 'Y','') as Admitting
FROM @patient
PIVOT
(
COUNT(Attribution) for attribution in ([Consulting],[Referring],[Attending],[Admitting])
) as pvt

使用 CROSS APPLY 的另一个选项

SELECT patientNumber, physician, t.* 
FROM @patient as p
CROSS APPLY 
(
SELECT 
iif(p.Attribution = 'Consulting','Y','') AS Consulting,
iif(p.Attribution = 'Referring', 'Y','') as Referring,
iif(p.Attribution = 'Attending', 'Y','') as Attending,
iif(p.Attribution = 'Admitting', 'Y','') as Admitting
) as t

+---------------+-----------+------------+-----------+-----------+-----------+
| patientNumber | physician | consulting | Referring | Attending | Admitting |
+---------------+-----------+------------+-----------+-----------+-----------+
|          3424 | jack      |            |           |           | Y         |
|          4567 | James     |            |           |           | Y         |
|          1234 | Jim       | Y          |           |           |           |
|          1234 | john      |            | Y         |           |           |
|          5678 | Mike      | Y          |           |           |           |
|          2345 | sally     |            |           | Y         |           |
|          5678 | sally     |            |           |           | Y         |
|          1234 | seth      | Y          |           |           |           |
+---------------+-----------+------------+-----------+-----------+-----------+