我有一个列表的数据需要进行分组,但我们只希望将数据计数大于3首先SQL Server组然后取消组合?
AA
AA
BB
CCC
CCC
CCC
回报
AA 1
AA 1
BB 1
CCC 3
谢谢您的帮助
我有一个列表的数据需要进行分组,但我们只希望将数据计数大于3首先SQL Server组然后取消组合?
AA
AA
BB
CCC
CCC
CCC
回报
AA 1
AA 1
BB 1
CCC 3
谢谢您的帮助
关闭我的头顶,您可以使用计数大于2的计数,然后使用UNION ALL
获取不在第一个查询中的任何记录:
SELECT 'AA' AS Data
INTO #Temp
UNION ALL SELECT 'AA'
UNION ALL SELECT 'BB'
UNION ALL SELECT 'CCC'
UNION ALL SELECT 'CCC'
UNION ALL SELECT 'CCC'
SELECT Data, COUNT(Data) AS MyCount
FROM #Temp
GROUP BY Data
HAVING COUNT(Data) > 2
UNION ALL
SELECT Data, 1
FROM #Temp
WHERE Data NOT IN (
SELECT Data
FROM #Temp
GROUP BY Data
HAVING COUNT(Data) > 2
)
ORDER BY Data
DROP TABLE #Temp
select data, case when total < 3 then 1 else total end total
from
(
select data, Count(Data) Total
from tbl
group by data
) g
join (select 1 union all select 2) a(b)
on a.b <= case when total < 3 then Total else 1 end
order by data
大部分时间这应该比LittleBobbyTables的回答快。
+1,这几乎把我的水从水里吹出来,非常好。 – LittleBobbyTables
使用窗函数为这样:
select col, count(*) as cnt
from (select col, count(*) over (partition by col) as colcnt,
row_number() over (order by (select NULL)) as seqnum
from t
) t
group by col, (case when colcnt < 3 then seqnum else NULL end)
此计算在所述列和每行的唯一标识符的总数。然后按组条件测试条件。如果小于3,那么它使用标识符来获取每一行。如果更大,在这种情况下它使用一个常量值(NULL)。
我想我需要更多的去这里 - 所以,你有一个字符串列表,你只想显示长度大于3的那些?或者出现三次以上?或两者? – Hotchips