-1

How will I write a sql function for the below requirements

I have a temp table table1 with all columns of int type

                   table1

scoreA |  scoreB | scoreC | classA |classB | classC |

suppose I have another temp table2 table with both of nvarchar column type

                   table2

        _______name__________myFormat_________
          ScoresOfAToC  |  1:10,2:20,3:30 |
           ClassOfAToC  |    1:4,2:5,3:6  |

How will I split myFormat column and insert data from table2 to table 1 such that my final output should be something like below:

                    table1

scoreA |  scoreB | scoreC | classA |classB | classC |
  10        20      30        4       5        6
mkRabbani
  • 16,295
  • 2
  • 15
  • 24
krity
  • 49
  • 3
  • 7

1 Answers1

1

As you mentioned you only need the logic of splitting required values from a combined value, you can use SUBSTRING with the help of CHARINDEX to get your desired results. Some sample codes are given below-

SELECT name,
SUBSTRING(myFormat, (CHARINDEX(':',myFormat, 0))+1,(CHARINDEX(',',myFormat, 0))-((CHARINDEX(':',myFormat, 0))+1)),
SUBSTRING(myFormat, (CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1))+1,(CHARINDEX(',',myFormat, (CHARINDEX(',',myFormat, 0))+1))-((CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1))+1)),
SUBSTRING(myFormat,CHARINDEX(':',myFormat,CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1)+1)+1,LEN(myFormat))
FROM table2

The output of this script for your sample data is as below. Hope you can now adjust this logic in your script.

ScoresOfAToC    10  20  30
ClassOfAToC      4   5   6  

To get everything in one line, Apply a PIVOT as below-

SELECT
SUBSTRING(ScoresOfAToC, (CHARINDEX(':',ScoresOfAToC, 0))+1,(CHARINDEX(',',ScoresOfAToC, 0))-((CHARINDEX(':',ScoresOfAToC, 0))+1)),
SUBSTRING(ScoresOfAToC, (CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1))+1,(CHARINDEX(',',ScoresOfAToC, (CHARINDEX(',',ScoresOfAToC, 0))+1))-((CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1))+1)),
SUBSTRING(ScoresOfAToC,CHARINDEX(':',ScoresOfAToC,CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1)+1)+1,LEN(ScoresOfAToC)),
SUBSTRING(ClassOfAToC, (CHARINDEX(':',ClassOfAToC, 0))+1,(CHARINDEX(',',ClassOfAToC, 0))-((CHARINDEX(':',ClassOfAToC, 0))+1)),
SUBSTRING(ClassOfAToC, (CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1))+1,(CHARINDEX(',',ClassOfAToC, (CHARINDEX(',',ClassOfAToC, 0))+1))-((CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1))+1)),
SUBSTRING(ClassOfAToC,CHARINDEX(':',ClassOfAToC,CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1)+1)+1,LEN(ScoresOfAToC)),
ScoresOfAToC,
ClassOfAToC
FROM
(
SELECT name,myFormat FROM table2
)AS A
PIVOT
(
    MAX(myFormat) FOR Name in ([ScoresOfAToC],[ClassOfAToC])
)PVT
mkRabbani
  • 16,295
  • 2
  • 15
  • 24