我正在寻找SQL Server中的解决方案,以便根据此示例将结果转换为另一种格式。
基本查询结果
ID Name Other IDs
-------------------------
1 John 22
2 Joe r15
2 Joe 12
3 Jim 17
3 Jim r87
向
ID Name UniqueID StudentID
----------------------------------------
1 John 22
2 Joe 12 r15
3 Jim 17 r87
有什么建议吗?
答案 0 :(得分:2)
我怀疑你可以有不同的规则来决定ID是UniqueId还是StudentID。根据您的数据我尝试了这个:
select [ID],
[Name],
max(case isnumeric([Other IDs]) when 1 then [Other IDs] end) UniqueID,
max(case left([Other IDs],1) when 'r' then [Other IDs] end) StudentID
from Table1
group by [ID],
[Name]
order by [ID]
您可以在SQLFiddler
中查看此演示中的结果答案 1 :(得分:0)
你应该学习一些规范化。
要解决问题请使用Pivot:
;WITH CTE AS
(
SELECT
ID, Name, [Other IDs], row_number() over (partition by ID order by [Other IDs]) rn
FROM
(values(1,'John', '22'),(2,'Joe', 'r15'),(2,'Joe','12'),(3,'Jim','17'),(3,'Jim','r87'))
x(ID, Name, [Other IDs])
)
SELECT ID, Name, [1] UniqueID, [2] StudentID FROM CTE
PIVOT (max([Other IDs]) FOR [rn] IN ([1], [2])) AS pvt
ORDER BY ID
结果:
ID Name UniqueID StudentID
1 John 22 NULL
2 Joe 12 r15
3 Jim 17 r87