I have a temporary table Temporary Table Image
| ID | Code | Type |
|---|---|---|
| 1 | A001 | A, B |
| 2 | B001 | A, B |
| 3 | C001 | A, B |
& a source table in my database Source Table Image
| ID | Code | Text |
|---|---|---|
| 1 | A001 | Text A |
| 2 | B001 | Text B |
| 3 | C001 | Text C |
I want to insert the the ‘type’ data to have output like this. Data types of ‘type’ is char(20). Output Table Image
| ID | Code | Text | Type |
|---|---|---|---|
| 1 | A001 | Text A | A |
| 2 | A001 | Text A | B |
| 3 | B001 | Text B | A |
| 4 | B001 | Text B | B |
| 5 | C001 | Text C | A |
| 6 | C001 | Text C | B |
Is it possible to come out the output by using pure SQL query?
Advertisement
Answer
You can get the desired result using ROW_NUMBER for the id column and STRING_SPLIT to separate the values from “A,B” into A and B.
SELECT ROW_NUMBER() OVER (ORDER BY t1.code) AS id, t1.code, t2.text, sp.value AS type FROM table1 AS t1 OUTER APPLY STRING_SPLIT(t1.type, ',') sp JOIN table2 AS t2 ON t1.code = t2.code;
You can replicate this here: db<>fiddle
I recommend to rename the columns “type” and “text” if possible since SQL key words should not be used as column name or table name.