Sql server T-SQL获取所有唯一组及其使用计数
如何查找表中存在的唯一组,并显示该类型组的使用频率 例如(SQL Server 2008R2) 所以,我想知道有多少次Sql server T-SQL获取所有唯一组及其使用计数,sql-server,tsql,count,grouping,Sql Server,Tsql,Count,Grouping,如何查找表中存在的唯一组,并显示该类型组的使用频率 例如(SQL Server 2008R2) 所以,我想知道有多少次 PMI 100 RT 100 VT 100 存在于我的表中,以及使用了多少itemid 这三个项组成一个组,因为它们一起被分配给一个itemid。相同的组合被分配给id 2527和2529,因此该组至少被使用两次。(usagecount=2) (我想知道,对于正在出现的所有类型的组) 整个数据集相当大,大约有5000.000条记录,因此我希望避免使用游标 每个itemi
PMI 100
RT 100
VT 100
存在于我的表中,以及使用了多少itemid
这三个项组成一个组,因为它们一起被分配给一个itemid。相同的组合被分配给id 2527和2529,因此该组至少被使用两次。(usagecount=2)
(我想知道,对于正在出现的所有类型的组)
- 整个数据集相当大,大约有5000.000条记录,因此我希望避免使用游标
- 每个itemid的代码/pct组合数在1到6之间变化
- “代码”字段中的值事先不知道,平均有十几个值
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
只需使用一个简单的组:
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
我认为按代码分组和Pct就足够了。见下文: select code,pct,count(p.*) from [table] as p group by code,pct 选择代码、pct、计数(第页*) 从[表]中选择p 分组代码
其中任何一个都应该返回代码和百分比的每个组合,以及代码的组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
或
我在这里可能理解不正确,但您是否只需要一个简单的代码列表,pct,没有外观?如果是这样,
从[TABLENAME]按代码分组选择code,pct,count(*)as VOL,pct
是否适合您?如果没有,请输入您想要的输出格式好吗?添加了示例输出。您能检查我的示例并告诉我您的问题是否正确吗?不,这只是一个代码/pct组合的计数。我需要(在我突出显示的示例中)代码/pct组合的整个3条记录组的计数。我需要知道这组3条记录被使用的频率。我知道你要去哪里,但是你的示例结果是一条记录。好的,我确实不知道你的分组逻辑是什么。请看示例数据中的itemid 2527和2529,它们分配了相同的组。xml解决方案对我来说似乎很奇怪,但它工作得很完美!谢谢rank()为单个代码pct组合分配一个组id,我需要这些组合按其在itemsgood spot上的组合用法进行分组-按代码分区,而不是按计数(*)排序-现在进行修改
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