我有一个列可以包含多个名称。
我需要一种方法:
数据示例:
Row 1 || bob hope deloris steve mike ||
Row 2 || melbob melbetty steve ||
预期的回答是:
| Column 1 | Column 2 |
Row 1 | 5 | 0 |
Row 2 | 3 | 2 |
希望这是有道理的。
答案 0 :(得分:3)
我有一个列可以包含多个名称。
为什么呢?这违反了第一范式。
如果"名称"是任何非空格字符的集合,它们由一个空格分隔,没有可以使用的前导空格
Select ID,
SIGN(L) + L -LEN(REPLACE(YourField,' ','')),
(1 + L -LEN(REPLACE(' ' + YourField,' Mel','')))/4
From @YourTable
CROSS APPLY (SELECT Len(YourField)) C(L)
(借用其他答案中的样本数据http://rextester.com/KPHAC50383)
答案 1 :(得分:2)
借助Cross Apply和一些XML来分割字符串
ID AnswerA AnswerB
1 5 0
2 3 2
返回
ID RetSeq RetVal
1 1 bob
1 2 hope
1 3 deloris
1 4 steve
1 5 mike
2 1 melbob
2 2 melbetty
2 3 steve
编辑 - 只是为了帮助您更好地将其可视化
选择*而不使用GROUP BY会产生以下内容。现在,通常我使用CROSS APPLY中的代码作为TVF(表值函数)。
$set