2017-04-10 56 views
0

混合了角色,我已經定義了這樣的一個表最大值:如何獲得已在SQLSERVER

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

我想得到這樣

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

的最大值,它會顯示

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

任何想法?

+0

你的價值格式保持同樣喜歡只有兩個字符串,然後是多少? –

+0

@SandipPatel是的 –

+0

你有什麼邏輯來比較兩個值? – TriV

回答

1

簡單是最好的

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

簡單是最好的! –

0

試試這個

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

它解決了我的問題!非常感謝你! –

+0

如果這個答案是正確的,請接受它 – ashkufaraz

+0

不適用這個數據:(1)ON33(2)AN42 –

1

您可以使用SUBSTRING只得到數字爲如下相同的格式:

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

你不明白嗎?如果你拿長度的價值長度和開始在位置3,你會超出範圍。 –

+0

我已經確認它遵循相同的格式,總是有前兩個字符的字符串,然後數字 –

+0

我沒有得到錯誤,因爲與OP確認總是有前兩個字符串 –

0

試試這個

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

你需要像這個?

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