2016-08-19 5 views
0

複数の列で構成される位置情報をDBに表示したいが、IDでグループ化する必要がある。私が得た解決策は、以下の方法で構成列を列挙することです。複数の実際の列で構成されるカスタム列によるグループ化

select 
    Id, 
    Name, 
    Here + ' and ' + There as Location, 
    count(*) as Count 
from KnownStuff 
group by Id, Name, Here, There 

しかし、その列でグループ化するより似たような方法があるかどうかを知りたいと思います。これに沿った何か。

group by Id, Name, Location 

あるいは、より良い(私のgooglearchingに基づいて、私はそれが不可能なことをかなり確信している、が)、私はしたいグループから同上を除く他のすべての列を除外制約。場合によっては、の合計であるや他の集約関数を使用しますが、サーバーに気にしないように伝えるのもいいでしょう。同じでない場合は、クラッシュ、焼き付け、泣かせましょう結局のところ、それは私の問題です、私は間違ったスクリプトを書いた。

ので:

  1. は、カスタム列をグループ化するよう-偉そうなアプローチはありますか?
  2. 今のところもっと簡単にするために、お尻を噛み付かないようにする方法はありますか?
+0

正確に解決しようとしている問題は何ですか? :) – NickyvV

+0

私が従うかわからない。私は、SQLに精通している人から、私が行ったことよりもグループ化を達成するためにプロに似た方法があるかどうかを知りたいと思います。また、開発プロセスを簡単にするためのハックアラウンドがある場合は、 –

+0

"DBに複数の列で構成される位置情報を表示したいが、IDでグループ化する必要がある。" IDでロケーションをグループ化すると、どのような結果になるでしょうか?たとえば、Max(場所)またはMin(場所)を選択できます。 – Serg

答えて

2

派生テーブルにクエリをラップします。

select id, name, location, count(*) 
from 
(
select 
    Id, 
    Name, 
    Here + ' and ' + There as Location, 
from KnownStuff 
) 
group by Id, Name, location 
+1

私は、サーバーが*魔法のように*場所*でグループ化することは、各列でグループ化することを意識していることを強く望んでいました。私は運がないと思っています。あなたの答えは技術的に正しいので、私はそれを受け入れています。どうですか(2)? –

+0

派生テーブルは、テーブルの列以外のものでグループ化を行うときのトリックです。 ANSI SQLでは、group by句の列だけが許可されます。 (一部の製品では、結果の列エイリアスも許可されています) – jarlh

+0

@KonradViltersten Sqlサーバーには、特に中間計算を処理するためのもう1つの便利なオプションAPPLYがあります。 – Serg

1

SQL CTE式で選択をカプセル化されるかもしれ

;with cte as (
select 
    Id, 
    Name, 
    Here + ' and ' + There as Location, 
    --count(*) as Count 
from KnownStuff 
--group by Id, Name, Here, There 
) 
select 
    Id, Name, Location, count(*) as [Count] 
from cte 
group by Id, Name, Location 

方法することができます。これは、サブクエリのように、実際に

1

であるあなたが、計算列を追加することができます。それは結果だGROUP BYを実行します。あなたのテーブル。

alter table knownstuff add Location as (Here + ' and ' + There) 

計算された列は物理的に格納されません。クエリを次のように書き直すことができます。

select 
    Id, 
    Name, 
    Location, 
    count(*) as Count 
from KnownStuff 
group by Id, Name,Location 
+0

興味深い。テーブルを変更しても影響を受けないと言っていますか?また、あなたの変更声明の最後には何がありますか?打ち間違え? –

+0

私はあなたがテーブルにこの列を追加した後にテーブルサイズが増加しないことを意味します。それは、select文が実行されるたびに計算される仮想カラムです。where句でそのカラムを使用しないでください。 – Mani

関連する問題