我有一个类似于下面的表结构
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
答案 0 :(得分:2)
在我看来,您需要使用MAX
:
SELECT [Name],
MAX(Col1) Col1,
MAX(Col2) Col2,
MAX(Col3) Col3,
MAX(Col4) Col4,
MAX(Col5) Col5
FROM #Temp
GROUP BY [Name]
答案 1 :(得分:1)
SELECT
Name,
Max(Col1) as Col1,
Max(Col2) as Col2,
Max(Col3) as Col3,
Max(Col4) as Col4,
Max(Col5) as Col5
FROM #Temp
GROUP BY Name