2016-05-18 15 views
0

Lassen Sie uns sagen, ich habe die Datenmenge, die wie folgt aussieht:Graf von einer der Säulen

col1 col2 col3 
a  2  20 
a  3  12 
a  4  34 
b  2  44 
c  3  23 
c  5  13 

....

Was ich will, eine Anzahl von col1 ist.

Ausgang:

col1 col2 col3 count 
a  2  20 3 
a  3  12 3 
a  4  34 3 
b  2  44 1 
c  3  23 2 
c  5  13 2 

.......

ich weiß ich kann tun:

with cte as (
select col1, count(*) count 
from tab1) 
select a.col1,a.col2,a.col3,cte.count 
from tab1 
join cte on a.col1=cte.col1 

Aber gibt es andere was ich tun kann, dass ohne Quer anwenden oder cte?

Auch vorausgesetzt, es gibt mehr als 3 Buchstaben in col1, so konnte ich nicht Summenfunktion verwenden entweder:

SUM(CASE WHEN ItemID = 'a' THEN 1 ELSE 0 END) AS count_a 
+0

Versuchen Sie es mit 'COUNT OVER':' * SELECT, \t C OUNT (*) OVER (PARTITION VON col1) FROM tab1' –

Antwort

2

Wenn Sie SQL Server verwenden 2008+, können Sie COUNT() OVER():

SELECT *, 
    COUNT(*) OVER(PARTITION BY col1) 
FROM tab1 

ONLINE DEMO

+1

Dies wurde nicht angezeigt, bevor ich eingereicht habe, +1 ... – sgeddes

+0

Danke. Es klappt – Norm