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 つの行のみを選択することですが、値が 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 に答える