Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server T-SQL获取所有唯一组及其使用计数_Sql Server_Tsql_Count_Grouping - Fatal编程技术网

Sql server T-SQL获取所有唯一组及其使用计数

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

如何查找表中存在的唯一组,并显示该类型组的使用频率

例如(SQL Server 2008R2)

所以,我想知道有多少次

PMI 100 
RT 100
VT 100
存在于我的表中,以及使用了多少itemid

这三个项组成一个组,因为它们一起被分配给一个itemid。相同的组合被分配给id 2527和2529,因此该组至少被使用两次。(usagecount=2)

(我想知道,对于正在出现的所有类型的组)

  • 整个数据集相当大,大约有5000.000条记录,因此我希望避免使用游标
  • 每个itemid的代码/pct组合数在1到6之间变化
  • “代码”字段中的值事先不知道,平均有十几个值
我尝试使用pivot,但最终我被卡住了,我还尝试了分组和计数的各种组合

有什么好主意吗

示例输出:

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