[英]Assign column name of max value to row based on comparison across columns
OID_ _ HOS1 _ _ HOS2 _ _ HOS3
A _ _ _ _ 3 _ _ _ _ _7 _ _ _ _10
B _ _ _ _ 12 _ _ _ _ 5 _ _ _ _ 8
C _ _ _ _ 3 _ _ _ _ 13_ _ _ _ 7
考慮給定區域(OID)中的此醫院就診表。 我想做的是在sql中自動確定上表的最后兩列。 我想比較每個區域(A,B,C)的所有醫院訪問次數(HOS1,HOS2,HOS3),並為每個區域的MAXV列分配最高訪問次數,並為訪問次數最高的醫院代碼到MAXH列,使其看起來像下表。
OID_ _ HOS1 _ _ HOS2 _ _ HOS3 _ _ MAXV _ _ MAXH
A _ _ _ _ 3 _ _ _ _ _ 7_ _ _ _ _ 10 _ _ _ 10 _ _ _ HOS3
B _ _ _ _ 12 _ _ _ _ 5 _ _ _ _ _ 8 _ _ _ _12 _ _ _ HOS1
C _ _ _ _ 3 _ _ _ _ 13 _ _ _ _ _ 7 _ _ _ _13 _ _ _ HOS2
對於SQL Server 2005+:
SELECT T.*, C.ColValue MAXV, C.ColName MAXH
FROM YourTable T
OUTER APPLY (SELECT TOP 1 *
FROM (SELECT 'HOS1', HOS1
UNION ALL
SELECT 'HOS2', HOS2
UNION ALL
SELECT 'HOS3', HOS3) X(ColName,ColValue)
ORDER BY ColValue DESC) C
這是一個演示。 結果如下:
╔═════╦══════╦══════╦══════╦══════╦══════╗
║ OID ║ HOS1 ║ HOS2 ║ HOS3 ║ MAXV ║ MAXH ║
╠═════╬══════╬══════╬══════╬══════╬══════╣
║ A ║ 3 ║ 7 ║ 10 ║ 10 ║ HOS3 ║
║ B ║ 12 ║ 5 ║ 8 ║ 12 ║ HOS1 ║
║ C ║ 3 ║ 13 ║ 7 ║ 13 ║ HOS2 ║
╚═════╩══════╩══════╩══════╩══════╩══════╝
select
t.[OID], t.[HOS1], t.[HOS2], t.[HOS3],
c.MAXV, c.MAXH
from Table1 as t
outer apply (
select top 1 *
from (values
(HOS1, 'HOS1'),
(HOS2, 'HOS2'),
(HOS3, 'HOS3')
) as a(MAXV, MAXH)
order by a.MAXH desc
) as C
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.