2016-07-21 17 views
0

Ich verwende Microsoft SQL Server Management Studio. Ich bin sehr neu in SQL und weiß wirklich nicht, wie ich anfangen soll, das zu lösen, also entschuldige ich mich im Voraus für den Mangel an bereits versuchten Lösungen. Ein vereinfachtes Beispiel meiner aktuellen SQL-Abfrage ist wie folgt:Binärer Filter für maximalen Wert der SQL-Abfrage

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

Welche ergibt so etwas wie so:

[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] 

Ich versuche, meine Datentabelle zu bekommen (Datatable), um den Wert auszuwählen, die die binären entsprechenden Indikator (Spalten Max1 und Max2 für Value1 bzw. Value2), dass es der maximale Wert für diese ID ist. Grundsätzlich versuche ich die obige Tabelle erhalten zu werden:

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

Wenn es viel einfacher ist, einen separaten Datenrahmen für jede Variable zu erstellen (Value1 ist in einem separaten resultierenden Datenrahmen als Wert2), ist das in Ordnung, wie Gut.

Danke

+0

Müssen Sie Ihre Suche auf Werte mit der „binären Indikator begrenzen "oder markiert das immer schon den Maximalwert? Es klingt fast so, als würde Matts Antwort auch funktionieren. – shawnt00

+0

Wie die Daten gespeichert werden, gibt es immer den "binären Indikator", der anzeigt, dass die entsprechende Zeile den maximalen Wert für die passende Variable enthält. – User247365

+0

So klingt es wie Sie könnten beide Antwort unten verwenden, obwohl vkp's. – shawnt00

Antwort

1

Sie bedingte Aggregation auf die binären Werte, die Werte holen können entsprechend 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

nice yep ich vermisste den Max1 und Max2 sein und Indikator welcher Datensatz er will – Matt

+0

@Matt Der Indikator ist redundant, für diese Frage sowieso. Sie könnten argumentieren, dass es besser ist, bei der einfacheren Abfrage zu bleiben. – shawnt00

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

Diese Antwort ist auch ausreichend, da der binäre Indikator redundant ist und das Maximum auf die gleiche Weise zieht. – User247365