DECLARE @zero_str VARCHAR(6) = '000000'
-- Generate table alike to yours
DECLARE @yourTable TABLE (
[value] varchar(max)
)
INSERT INTO @yourTable VALUES ('[2,4,5]'),('[0,3,4]')
-- convert array to xml
;WITH cte AS (
SELECT [value],
CAST('<a>'+REPLACE(SUBSTRING([value],2,LEN([value]) - 2),',','</a><a>')+'</a>' as xml) as x
FROM @yourTable
)
-- do the stuff
SELECT c.[value],
RIGHT(@zero_str + CAST(SUM(CAST(STUFF(@zero_str,t.c.value('.','tinyint')+1,1,'1') as int)) as varchar(6)),6)
FROM cte c
CROSS APPLY x.nodes('/a') as t(c)
GROUP BY c.[value]
Ausgang:
value (No column name)
[0,3,4] 100110
[2,4,5] 001011
Erläuterung:
STUFF(@zero_str,t.c.value('.','tinyint')+1,1,'1')
Dieser einen Teil 000000
-1
ändert, nach diesem Teil haben wir:
[2,4,5] 001000
[2,4,5] 000010
[2,4,5] 000001
[0,3,4] 100000
[0,3,4] 000100
[0,3,4] 000010
In der Tabelle. Dann machen wir CASTing zu int
? so können wir SUM
verwenden, nachdem diese Daten aussehen wird:
[0,3,4] 100110
[2,4,5] 1011
Dann fügen wir 000000
String und verwenden RECHTS nur 6 Symbole zu erhalten.
Hoffe, dass hilft!
Hinweis:
Wenn keine ids in einer Tabelle dann ROW_NUMBER in CTE Teil verwenden.
DECLARE @zero_str VARCHAR(6) = '000000'
-- Generate table alike to yours
DECLARE @yourTable TABLE (
[value] varchar(max)
)
INSERT INTO @yourTable VALUES ('[2,4,5]'),('[0,3,4]'),('[2,3,4]'),('[2,4,5]'),('[0,3,4]'),('[2,3,4]')
-- convert array to xml
;WITH cte AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as rn,
[value],
CAST('<a>'+REPLACE(SUBSTRING([value],2,LEN([value]) - 2),',','</a><a>')+'</a>' as xml) as x
FROM @yourTable
)
-- do the stuff
SELECT c.rn,
c.[value],
RIGHT(@zero_str + CAST(SUM(CAST(STUFF(@zero_str,t.c.value('.','tinyint')+1,1,'1') as int)) as varchar(6)),6)
FROM cte c
CROSS APPLY x.nodes('/a') as t(c)
GROUP BY c.rn, c.[value]
Ausgang:
rn value (No column name)
2 [0,3,4] 100110
5 [0,3,4] 100110
3 [2,3,4] 001110
6 [2,3,4] 001110
1 [2,4,5] 001011
4 [2,4,5] 001011
Was ist die Logik unter Umwandlung '[0,3,4]' 'in 100110'? Bitte? fügen Sie einige Details hinzu. – gofr1
@ gofr1 - Frage mit Erläuterung bearbeitet – KulOmkar
Danke! Noch eine Frage. Wie ist diese Zeichenfolge gespeichert? Nur eine 'varchar'-Spalte mit' [0,3,4] '? – gofr1