2016-04-25 19 views
0

Ich habe eine Anforderung, wo ich auf Datensätze überprüfen muss und wenn der Datensatz für beide Werte vorhanden ist, dann wird Flag auf 0 festgelegt und wenn es nur für einen Wert vorhanden ist, dann ist Flag 1.SQL Server 2014 Abfragen

Zum Beispiel:

ID  Value 
1 'Season16' 
2 'Season16' 
2 'Season15' 
3 'Season15' 
3 'Season15' 
4 'Season16' 

Jetzt möchte ich,

ID Flag 
1 1 
2 0 
3 0 
4 1 

Ie Wenn ID sowohl Season16 als auch Season 15 hat, dann ist Flag 0 sonst 1.

Kannst du Leute deine Gedanken einstreuen?

+2

Ich würde vorschlagen, eine 'select' Abfrage ... –

+0

Wird es immer nur diese beiden Werte (Season15 und Season16) sein? – Steven

+0

Nein. Es kann viele Jahreszeiten geben. Aber ich muss Wert = Max (Saison) und Wert <> Max (Saison) -1 wählen. Ich bin irgendwie in der Lage, die maximalen und vorherigen Werte zu erhalten. aber nicht in der Lage, die Flagge zu setzen. – chits

Antwort

0

Dies ist sehr spezifisch für Ihre Tabellenstruktur und die möglichen Anzahl der Jahreszeit, aber dies ist ein Weg:

select 
    Id, 
    case 
     when count(1) > 1 then 0 
     else 1 
    end Flag 
from MyTable 
group by Id 
0

Hier ist ein Beispiel mehr CTEs verwenden. Die ersten beiden bauen die Tabellen für jeden spezifischen Grund auf. Die letzte Auswahl gibt alle IDs mit dem gesetzten Flag zurück, wenn beide Jahreszeiten in der Werteliste waren.

WITH CTE16 AS (SELECT * FROM @myTable WHERE Value = 'Season16'), 
CTE15 AS (SELECT * FROM @myTable WHERE Value = 'Season15') 

SELECT DISTINCT A.ID, 
     CASE WHEN B.Flag IS NULL THEN 1 ELSE 0 END [Flag] 
FROM @myTable A LEFT OUTER JOIN (SELECT A.ID, 1 [Flag] 
           FROM CTE16 A INNER JOIN CTE15 B 
             ON A.ID = B.ID) B 
     ON A.ID = B.ID 
0

Verwenden Sie eine Groß-/Kleinschreibung. Hoffentlich wird dies Ihre Frage beantworten. Sie können jedem helfen, indem Sie ein wenig mehr Informationen über Ihren Tisch geben.

Select 
    Value1, value2, 
    Case when value1 = value2 then 0 else 1 end as Flag 
from Values_Table