经常 多行变一行 合并for xml path 去汇总。
有时候 遇见 多选的情况 在统计的时候需要拆分出来。怎么办? 接下来讲解 xml 用法,
选择 | 数量 |
1,2 | 50 |
3 | 30 |
SELECT 数量,选择= CONVERT(xml,'<root><v>' + REPLACE(选择, ',', '</v><v>') + '</v></root>') FROM tb
选择 | 数量 |
<root><v>1</v><v>2</v></root> | 50 |
<root><v>3</v></root> | 30 |
然后
select * from tb2 A OUTER APPLY
(
SELECT TypeCode = N.v.value('.', 'varchar(100)') FROM A.选择.nodes('/root/v') N(v)
) B
选择 | 数量 | TypeCode |
<root><v>1</v><v>2</v></root> | 50 | 1 |
<root><v>1</v><v>2</v></root> | 50 | 2 |
<root><v>3</v></root> | 30 | 3 |
之后就可以根据 typecode 去分组求和了
如果说 拆分选择 还要拆分数量 如下 怎么办? 暂未解决
选择 | 数量 | TypeCode |
<root><v>1</v><v>2</v></root> | 25 | 1 |
<root><v>1</v><v>2</v></root> | 25 | 2 |
<root><v>3</v></root> | 30 | 3 |
如果是 不拆分就想找一下 选择里面有1的 数量 那么就用
where CHARINDEX(','+'1'+',' , ','+选择+',') > 0 直接筛选出来有1的 那么 1,3 会找出来 1,2也会找出来
(Sql Server)数据的拆分和合并
https://www.cnblogs.com/fang-beny/archive/2013/08/13/3255171.html
https://www.cnblogs.com/baili-luoyun/p/11212691.html