旋转数据或使用交叉表 - 旋转我的 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 | | | |
+---------------+-----------+------------+-----------+-----------+-----------+
我正在尝试使用 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 | | | |
+---------------+-----------+------------+-----------+-----------+-----------+