2016-07-21 33 views
0

我正在使用Microsoft SQL Server Management Studio。我对SQL很陌生,甚至不知道如何开始解决这个问题,所以我提前为缺少已经尝试的解决方案而道歉。我目前的SQL查询的一个简单的例子如下:SQL查询最大值的二进制过滤器

USE [DataBase] 
GO 
SELECT [ID] 
     ,[Value1] 
     ,[Max1] 
     ,[Value2] 
     ,[Max2] 
FROM [DataTable] 

其中产量像这样:

[ID] [Value1] [Max1] [Value2] [Max2] 
[1] [2]  [0]  [9]  [1] 
[1] [4]  [0]  [3]  [0] 
[1] [8]  [1]  [5]  [0] 
[1] [5]  [0]  [6]  [0] 
[2] [1]  [0]  [1]  [0] 
[2] [6]  [1]  [4]  [0] 
[2] [3]  [0]  [3]  [0] 
[2] [2]  [0]  [5]  [1] 

我试图让我的DataTable(数据表)来选择对应的二进制值指标(分别为Value1和Value2的Max1和Max2列),它是该ID的最大值。基本上我试图让上面的表格成为:

[ID] [Value1] [Value2] 
[1] [8]  [9] 
[2] [6]  [5] 

如果要简单得多创建为每个变量单独的数据帧(值是在一个单独的结果数据帧值2),这是没有问题的好。

谢谢

+0

你需要搜索范围限制为值与“二元指标值“on或者是否总是标记最大值?这听起来像马特的答案也会起作用。 – shawnt00

+0

数据存储的方式总是存在“二进制指示符”,表示相应的行包含匹配变量的最大值。 – User247365

+0

所以它听起来像你可以使用下面的答案,虽然vkp的。 – shawnt00

回答

1

可以使用条件聚集拿起对应的二进制值1.

select 
[ID] 
,max(case when [Max1] = 1 then [Value1] end) as value1 
,max(case when [Max2] = 1 then [Value2] end) as value2 
from [DataTable] 
group by [ID] 
+0

不错,是的我错过了Max1和Max2的存在以及他想要的记录的指标 – Matt

+0

@Matt无论如何,这个指标是多余的。你可能会认为坚持简单的查询会更好。 – shawnt00

1
SELECT [ID] 
     ,MAX([Value1]) as Value1 
     ,MAX([Value2]) as Value2 
FROM [DataTable] 
GROUP BY 
    [ID] 
+0

这个答案也是足够的,因为二元指标是多余的,并以相同的方式拉最大值 – User247365