Hej, Det enklaste är nog att lägga på en 0:a före value om value bara är ett tecken. Hej, För det första måste du ju kolla så att du bara lägger till ett tecken om det är exakt ett där, och sen är det kanske: Ja krångligt kan det bli när man blandar (int och char) och ger...Gruppera data SQL sats där char och integer förekommer får ej ut rätt data
jag har en databas enligt:
ID | Int
PID | Int
Value | Char
1 | 1 | A
2 | 1 | B
3 | 1 | C
4 | 2 | 1
5 | 2 | 2
6 | 2 | 3
7 | 3 | 1
8 | 3 | 2
9 | 3 | A
10 | 4 | 1
11 | 4 | 2
12 | 4 | 10
Nu gör jag en sql-sats:
SELECT PID, MAX(Value) as Val FROM tbl_PID GROUP BY PID
Resultatet blir då:
1 | C
2 | 3
3 | A
4 | 2
Jag vill ha följande resultat:
1 | C
2 | 3
3 | A
4 | 10
Hur sjutton kan man kombinera att MAX satsen skall välja senaste bokstav om det finns bokstäver och nummer för ett visst PID, och om det endast förekommer nummer för ett PID så är det högsta numret som skall visas?
Jag har försökt med ASCII() men ej lyckats, stort tack på förhand.
Mvh
JonasSv: Gruppera data SQL sats där char och integer förekommer får ej ut rätt data
Men det funkar bara om du har exakt det upplägget du har nu. Hur stora kan numren och bokstäverna vara?
Och vad händer om det skulle stå A1?
Den andra varianten är att dela upp listan i två delar, "de som har bokstäver" och "de som inte har bokstäver", och omvandla de senare till tal, och sen ta max.Sv: Gruppera data SQL sats där char och integer förekommer får ej ut rätt data
jag får inte till det genom att lägga på 0 får följande fel:
[Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the varchar value 'A' to data type int.
då jag skriver MAX(0 + Value)
Hmm... väldigt skumtSv:Gruppera data SQL sats där char och integer förekommer får ej ut rätt data
'0' + Value
Eller möjligtvis CONCAT eller något liknanade.Sv:Gruppera data SQL sats där char och integer förekommer får ej ut rätt data
Om man ska följa Niklas förslag så blir det som exempel nr 1 här nedan.
Vill man "tvätta" bort 0:an kan man göra som exempel nr 2.
1.
<code>
SELECT
PID,
MAX(CASE WHEN (LEN([Value]) = 1) THEN '0' + [Value] ELSE [Value] END) AS [Value]
FROM @tbl_PID
GROUP BY PID;
</code>
2.
<code>
;WITH get_values AS
(
SELECT
PID,
MAX(CASE WHEN (LEN([Value]) = 1) THEN '0' + [Value] ELSE [Value] END) AS [Value]
FROM @tbl_PID
GROUP BY PID
)
SELECT
PID,
CASE WHEN LEFT([Value], 1) = '0' THEN RIGHT([Value], LEN([Value])) ELSE [Value] END AS [Value]
FROM get_values;
</code>
OBS!!!
Eftersom vi ännu inte vet hur datan kan se ut, så kan förslaget behövar justeras...