Let's say I have table #DOC like this:
| polNum | boxNo | batchNum |
|---|---|---|
| 111111 | null | qwe1234 |
| 111111 | ff/55 | rto1235 |
| 111111 | ee/59 | yhn1238 |
| 111111 | ww/55 | rto1235 |
| 222222 | dd/58 | jkl1234 |
| 222222 | null | fgh1234 |
| 333333 | null | asz1235 |
| 444444 | ff/55 | edc1234 |
| 444444 | tt/58 | qaz1234 |
This table doesn't have any primary key. We can assume that polNum and boxNo pair are unique.
I need have collection from batchNum and boxNo become like this:
| polNum | boxNo | batchNum |
|---|---|---|
| 111111 | null | |
| 111111 | ff/55 | qwe1234,rto1235,yhn1238 |
| 111111 | ee/59 | qwe1234,rto1235,yhn1238 |
| 111111 | ww/55 | qwe1234,rto1235,yhn1238 |
| 222222 | dd/58 | jkl1234,fgh1234 |
| 222222 | null | |
| 333333 | null | asz1235 |
| 444444 | ff/55 | edc1234,qaz1234 |
| 444444 | tt/58 | edc1234,qaz1234 |
Need to manipulate batchNum row with comma separated based polNum and not empty boxNo and put same row. But if any condition boxNo is empty or null batchNum will put same polNum row.
I was tried using stuff approach, result still goes wrong:
SELECT DISTINCT polNum, boxNo ,
STUFF((
SELECT DISTINCT ','+batchNum
FROM #DOC a
WHERE a.polNum=d.polNum or a.boxNo = d.boxNo
FOR XML PATH('')
),1,1,'') batchNum
FROM #DOC d
| polNum | boxNo | batchNum |
|---|---|---|
| 111111 | null | qwe1234,rto1235,yhn1238 |
| 111111 | ff/55 | qwe1234,rto1235,yhn1238 |
| 111111 | ee/59 | qwe1234,rto1235,yhn1238 |
| 111111 | ww/55 | qwe1234,rto1235,yhn1238 |
| 222222 | dd/58 | jkl1234,fgh1234 |
| 222222 | null | jkl1234,fgh1234 |
| 333333 | null | asz1235 |
| 444444 | ff/55 | edc1234 |
| 444444 | tt/58 | qaz1234 |
batchNum is not always be null, depends on value of boxNo and polNum. Null row have values and some not. depend on BoxNo value itself.