我有一个类似于下面的表结构
Create Table #Temp(Name varchar(10),Col1 int,Col2 int,Col3 int,Col4 int,Col5 int)
在这种情况下,表可以重复相同的名称,但其他值不同
所以。
样本值可以像
Insert Into #Temp
Values('ABC',1,0,0,1,1)
Insert Into #Temp
Values('ABC',1,0,1,1,0)
Insert Into #Temp
Values('ABC',1,0,1,1,0)
Insert Into #Temp
Values('DEF',0,0,0,1,0)
Insert Into #Temp
Values('DEF',1,0,1,1,1)
Insert Into #Temp
Values('DEF',1,1,0,1,1)
我在这里要做的是为每个名称只选择一行,但选择优先级为 1 的列。
所以这种情况下的预期结果是
Name Col1 Col2 Col3 Col4 Col5
ABC 1 0 1 1 1
DEF 1 1 1 1 1
我已经通过执行以下操作来实现它,这绝对可以。但是有什么合适的(简单的)方法可以做到这一点。
SELECT Name,
(Select top 1 Col1
from #Temp T
Where T.Name=M.Name
Order By Col1 desc) as Col1,
(Select top 1 Col2
from #Temp T
Where T.Name=M.Name
Order By Col2 desc) as Col2,
(Select top 1 Col3
from #Temp T
Where T.Name=M.Name
Order By Col3 desc) as Col3,
(Select top 1 Col4
from #Temp T
Where T.Name=M.Name
Order By Col4 desc)as Col4,
(Select top 1 Col5
from #Temp T
Where T.Name=M.Name
Order By Col5 desc) as Col5
FROM #Temp M
Group By Name