0

非常に単純なことですが、私はそれをうまく機能させることができません:)

select x.name, count(x.name) from <table_name> x where ...<complex and long>...

x.name が group by で使用されていないというエラーがスローされます。

select x.name from <table_name> x where ...<complex and long>...

正常に動作し、たとえば 6 つの名前を返します

select count(x.name) from <table_name> x where ...<complex and long>...

正常に動作し、たとえば数字の 6 を返します

しかし、次の方法でグループを追加しようとすると、組み合わせが機能しません。

select x.name, count(x.name) from <table_name> x where ...<complex and long>...
group by x.name

それは機能しましたが、すべてのカウントは 6 ではなく 1 でした。

問題は、最初に変数にカウントを取得してから、名前を取得するためだけに長い sql ステートメントを記述できることですが、長く複雑な選択ステートメントを 2 回記述したくないということです。1 回の選択で組み合わせを行うには、何らかの方法が必要です。すべての名前を取得し、ちなみにそれらの数を教えてください。

ありがとう

PS

name    bla1    bla2
a       ...     ...     
a       foo     ...     
b       foo     ...     
c       ...     ...     
d       foo     ...     
d       foo     ...     
b       foo     ...     
c       foo     ...     

bla1 = foo である x.name の結果は次のようになります。

a
b
d
d
b
c

bla1 = foo の場合の count(x.name) の結果は次のようになります。

6

私の望ましい結果:

...variable definitions
select @foundName = x.name, @numOfAllFoundNames = count(x.name)
from <table_name> x where ...<complex and long>...

@foundName = a (名前に関係なく、名前の 1 つだけ) @numOfAllFoundNames = 6

4

5 に答える 5

2

最も簡単な方法は@@rowcount、クエリの後に使用することです。

select x.name from <table_name> x where ...<complex and long>...

select 'the number of rows is:', @@rowcount

余談ですが、非集計フィールド ( name) と集計フィールド ( ) を要求する場合は、をカウントするかをサーバーに伝えるために をcount(name)提供する必要があります。セット内のすべての個別の名前にが適用されるため、1 が表示されます。たとえば、行が 1 つ少なくなり、名前が繰り返された場合に表示されます。group bygroup by namecount2

于 2012-08-08T13:41:08.180 に答える
2

これを試して :

select x.name, count(x.name) over () cnt 
from <table_name> x where ...<complex and long>...
于 2012-08-08T13:40:27.113 に答える
0

これは、ほとんど使用されていない COMPUTE 句の仕事です。

SELECT x.name
FROM [table]
WHERE [... ]
COMPUTE COUNT(x.name)

COMPUTE が廃止されたことに注意してください。

于 2012-08-08T13:43:08.147 に答える
0

名前を選択した後に@@ROWCOUNTを使用して、複雑なクエリによって返される行数を取得できます。そうしないと、各名前を選択する同じクエリで名前の数を取得する簡単な方法がありません。

于 2012-08-08T13:41:11.157 に答える
0

ほとんど正解です。

...variable definitions
set @numOfAllFoundNames = 0;
select @foundName = x.name, @numOfAllFoundNames = @numOfAllFoundNames+1
from <table_name> x where ...<complex and long>...
于 2012-08-08T13:41:52.880 に答える