当前位置: 代码迷 >> Sql Server >> 再问一句高难度sql,该怎么解决
  详细解决方案

再问一句高难度sql,该怎么解决

热度:94   发布时间:2016-04-27 14:23:14.0
再问一句高难度sql
表结构和数据如下:
数量 人员
30 小王、小李、小张
20 小王、小李
40 小张

能否只用一句sql得到如下结果

小王 20
小李 20
小张 50 

即数量根据人员数平分在每个人员上,人员若有多个,用顿号分隔。
请教高手,谢谢!

------解决方案--------------------
SQL code
CREATE TABLE #(Qty INT,Employee NVARCHAR(200))INSERT # SELECT 30, N'小王、小李、小张'INSERT # SELECT 20, N'小王、小李'INSERT # SELECT 40, N'小张'GOSELECT Employee,    Qty=SUM(Qty)FROM (SELECT substring(a.Employee,b.number,charindex(N'、',a.Employee+N'、',b.number)-b.number) AS Employee,QtyFROM (SELECT Employee,Qty=Qty/(LEN(Employee)-len(REPLACE(Employee,N'、',''))+1) FROM #) AS a,master.dbo.spt_values AS b WHERE b.type='P' AND charindex(N'、',N'、'+a.Employee,b.number)=b.number)TGROUP BY Employee/*Employee    Qty小李    20小王    20小张    50*/
------解决方案--------------------
--弄错了,我以为求和呢
SQL code
select 人员,sum(数量) as 数量 from (     select substring(a.人员, b.number, charindex(',', a.人员 + ',', b.number) - b.number) as 人员 ,    数量/(len(a.人员) - len(replace(a.人员, ',', '')) + 1) as 数量    from T a join master.dbo.spt_values b     on b.type = 'p' and substring(','+ a.人员, b.number,1) = ','    and b.number between 1 and len(a.人员) ) x group by 人员/*人员                 数量------------------ -----------小李                 20小王                 20小张                 50*/
  相关解决方案