我有一张包含27个列的表,我必须从这个表中算出一些内容,如下所示:
OPP_ID ACC_ID
--------------------------
1 A
2 B
3 B
4 A
5 C
6 D
7 A
8 E
我需要这个:
{{2} }所以我想计算ACC_ID并需要一个新列,其中包含特定ACC_ID在表中的频率,例如ACC_ID = A在表格中是3次,所以我希望在每个ACC_ID值后面的新列中使用值为3的A。
我已经尝试了这个但是我找不到完美的解决方案。
我使用了OPP_ID ACC_ID count
-----------------------------------
1 A 3
2 B 2
3 B 2
4 A 3
5 C 1
6 D 1
7 A 3
8 E 1
但如果我使用group by function
答案 0 :(得分:3)
使用窗口函数(如果您的DBMS支持它)
SELECT OPP_ID, ACC_ID, COUNT(*) OVER (PARTITION BY ACC_ID) FROM table
答案 1 :(得分:1)
SELECT A.*, B.[Count]
FROM MyTable A
INNER JOIN (
SELECT ACC_ID, Count(*) AS [Count]
FROM MyTable
GROUP BY ACC_ID
) B ON B.ACC_ID = A.ACC_ID
答案 2 :(得分:0)
如果您使用的是MS SQL Server,请尝试以下操作:
SELECT T.OPP_ID, S.ACC_ID, S.COUNT FROM
(
SELECT ACC_ID, COUNT(*) COUNT FROM #TEMP GROUP BY ACC_ID
) S
INNER JOIN #TEMP T ON T.ACC_ID = S.ACC_ID
答案 3 :(得分:0)
SELECT A.OPP_ID,A.ACC_ID,COUNT(R) COUNT FROM MYTABLE A INNER JOIN(
SELECT OPP_ID,ACC_ID ,DENSE_RANK() OVER (PARTITION BY ACC_ID ORDER BY OPP_ID) R FROM MYTABLE) B
ON A.ACC_ID=B.ACC_ID GROUP BY A.ACC_ID,A.OPP_ID