日期:2014-05-18  浏览次数:20581 次

问一个SQL语句 谢谢
一张表:
字段:
id,a

a可能包含的数据值:   m,n,o,p

id   a   各个字段都是有可能重复的,我想查询出的结果是

unique(id),   count(m),count(n),count(o),count(p)

也就是对ID分组,并对字段a中的值分组,且对字段A中出现值的数量进行统计,不知道有什么好的方法吗?   谢谢!

------解决方案--------------------

Select
id,
SUM(Case a When 'm ' Then 1 Else 0 End)As m,
SUM(Case a When 'n ' Then 1 Else 0 End)As n,
SUM(Case a When 'o ' Then 1 Else 0 End)As o,
SUM(Case a When 'p ' Then 1 Else 0 End)As p
From

Group By
id
------解决方案--------------------

--建立测试数据
CREATE TABLE tb_a(ID INT,intString VARCHAR(50))
INSERT tb_a
SELECT 1, 'm,n,o,p ' UNION ALL
SELECT 1, 'm,o,p ' UNION ALL
SELECT 1, 'm,n,p ' UNION ALL
SELECT 2, 'm,p ' UNION ALL
SELECT 3, 'p ' UNION ALL
SELECT 3, 'm,n,o,p ' UNION ALL
SELECT 3, 'm,o,p '
GO

SELECT id,
countm=sum(case when charindex( ',m, ', ', '+intString+ ', ')> 0 then 1 else 0 end),
countn=sum(case when charindex( ',n, ', ', '+intString+ ', ')> 0 then 1 else 0 end),
counto=sum(case when charindex( ',o, ', ', '+intString+ ', ')> 0 then 1 else 0 end),
countp=sum(case when charindex( ',p, ', ', '+intString+ ', ')> 0 then 1 else 0 end)
FROM tb_a
group by id