2017-04-10 2 views
0

mit Charakter in Sqlserver gemischt wurde ich eine Tabelle wie folgt definiert:Wie Max-Wert erhalten, die

Name  Value 
-----  ----- 
Alice  MN21 
Bob  MN22 

i den maximalen Wert wie

select Name,MAX(Value) as Value from #Character 

erhalten möchten und es wird zeigen,

Name  Value 
----  ----- 
Bob  MN22 

Irgendwelche Ideen?

+0

Ihr Wert Format wie nur zwei Zeichenketten gleich bleiben und dann Nummer? –

+0

@SandipPatel Yep –

+0

Was ist Ihre Logik, um zwei Werte zu vergleichen? – TriV

Antwort

1

Einfachheit ist am besten

select top 1 Name,Value from #Character order by Value desc 
+0

Einfachheit ist das Beste! –

0

Versuchen Sie, diese

select Name,Value from #Character where value in (
    select MAX(CAST(value AS int)) from #Character) 
+0

Es ist mein Problem behoben! vielen Dank! –

+0

Wenn diese Antwort richtig ist, bitte akzeptieren Sie sie – ashkufaraz

+0

Nicht mit diesen Daten arbeiten: (1) ON33 (2) AN42 –

1

Sie SUBSTRING nur numerische können erhalten für gleiche Format wie folgt:

SELECT TOP(1) 
    Name, 
    Value, 
    SUBSTRING(Value,3,LEN(Value)) AS MaxValue 
FROM @tblTest order by CAST(SUBSTRING(Value,3,LEN(Value)) AS INT) DESC 
+0

Sie erhalten keinen Fehler? Wenn Sie als Länge die Länge des Werts nehmen und an Position 3 beginnen, geraten Sie außer Reichweite. –

+0

Ich habe bereits bestätigt, dass es das gleiche Format folgen, gibt es immer zuerst zwei Zeichenketten und dann numerische –

+0

Ich bekomme keinen Fehler, weil als Bestätigung mit OP gibt es immer zuerst zwei Zeichen in der Zeichenfolge –

0

Try this

select Name,MAX(Value REGEXP '[0-9]{5}') as Value from #Character 
1

Sie etwas brauchen Sie wie Dies?

CREATE TABLE #CH (NAME VARCHAR(20), VALUE VARCHAR(10)) 
INSERT INTO #CH VALUES ('Alice', 'MN21'), ('Bob', 'MN22'), ('Angie', 'AO42'),('Karl', 'AO27'); 
SELECT NAME, MAXVAL, VALUE 
FROM #CH 
INNER JOIN (SELECT SUBSTRING(VALUE,1,2) AS LEFTPART, MAX(SUBSTRING(VALUE,3,2)) AS MAXVAL 
      FROM #CH 
      GROUP BY SUBSTRING(VALUE,1,2)) B ON #CH.VALUE = B.LEFTPART+B.MAXVAL 

Output: 
NAME     MAXVAL VALUE 
-------------------- ------ ---------- 
Bob     22  MN22 
Angie    42  AO42 
Verwandte Themen