1

我有一个类似于下面的表结构

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
4

2 回答 2

3

在我看来,您需要使用MAX

SELECT  [Name],
        MAX(Col1) Col1,
        MAX(Col2) Col2,
        MAX(Col3) Col3,
        MAX(Col4) Col4,
        MAX(Col5) Col5
FROM #Temp
GROUP BY [Name]
于 2013-09-24T16:36:07.393 回答
2
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
于 2013-09-24T16:36:17.283 回答