如何查找表格中存在的唯一组,并显示该类型组的使用频率?
例如(SQL Server 2008R2)
所以,我想找出
组合多少次PMI 100
RT 100
VT 100
出现在我的表格中,以及使用了多少个itemid;
这三个组成一个组,因为它们一起被分配到一个itemid。相同的组合分配给id 2527和2529,因此该组至少使用两次。 (usagecount = 2)
(我想知道出现的所有类型的群组)
我尝试使用数据透视表,但我最终陷入困境,我也尝试了各种GROUP-BY组合并计算。
有什么好主意吗?
示例输出:
code pct groupid usagecount
PMI 100 1 234
RT 100 1 234
VT 100 1 234
CD 5 2 567
PMI 100 2 567
VT 100 2 567
PMI 100 3 123
PT 100 3 123
VT 100 3 123
RT 100 4 39
VT 100 4 39
etc
答案 0 :(得分:2)
只使用一个简单的小组:
SELECT
code
, pct
, COUNT(*)
FROM myTable
GROUP BY
code
, pct
不太确定这是否更像你正在寻找的东西:
select
uniqueGrp
, count(*)
from (
select distinct
itemid
from myTable
) as I
cross apply (
select
cast(code as varchar(max)) + cast(pct as varchar(max)) + '_'
from myTable
where myTable.itemid = I.itemid
order by code, pct
for xml path('')
) as x(uniqueGrp)
group by uniqueGrp
答案 1 :(得分:2)
其中任何一个都应该返回代码和百分比的每个组合,代码的组ID和代码的实例总数。您也可以使用它们来添加特定代码/ pct组合的实例数,以确定%贡献等。
select
distinct
t.code, t.pct, v.groupcol, v.vol
from
[tablename] t
inner join (select code, rank() over(order by count(*)) as groupcol,
count(*) as vol from [tablename] s
group by code) v on v.code=t.code
或
select
t.code, t.pct, v.groupcol, v.vol
from
(select code, pct from [tablename] group by code, pct) t
inner join (select code, rank() over(order by count(*)) as groupcol,
count(*) as vol from [tablename] s
group by code) v on v.code=t.code
答案 2 :(得分:1)
按代码分组,我认为Pct应该足够了。请参阅以下内容:
select code,pct,count(p.*) from [table] as p group by code,pct