2017-02-08 3 views
0

同じアイテムIDを持つ行に対してのみ数量を選択する際に問題が発生しました。ここに私のテーブルには、SQL共通の列を1つ持ち、同じテーブルにある行を選択する方法

ID |quanti| item | pack | 
87 | "600"| 4924592 | 5042012 
115| "300"| 4924710 | 5042034 
116| "300"| 4924711 | 5042034 
120| "200"| 4924710 | 5042036 
121| "300"| 4924711 | 5042036 

ですそして、何私の出力は以下のようになりますと、だから私は量を合計し、サブクエリで使用することができ、ここで

300 | 4924711 
300 | 4924711 

です。

あなたは、このような重複を取得するには、ウィンドウ関数を使用することができます
+1

どのDBMSを使用していますか? Postgres?オラクル? –

+1

'count(*)> 1'を持っています – jarlh

+0

'テーブルからアイテムを選択するアイテム= 4924711' –

答えて

1

select t.* 
from (select t.*, count(*) over (partition by quantity, item) as cnt 
     from t 
    ) t 
where cnt > 1; 

しかし、単純な集約が十分ではないでしょうか?あなたは2つだけではなく、値を1行を取得したい:

select quantity, item, count(*) as cnt 
from t 
group by quantity item 
having count(*) > 1; 
+0

ありがとうございました。 :)サブクエリでそれを動作させるのは難しかったが、私はそれをした:D –

0

に見えますが、これが欲しいよう:quantityが数値でない場合

SELECT SUM(quantity) 
     ,item 
FROM MyTable 
GROUP BY item 

、あなたはCASTにそれを必要な場合があります。

0

は、あなたが使用するDBMSに依存するが、概念的には、このような:

SELECT quantity, item, sum(pack), count(1) AS cnt 
FROM table 
GROUP BY 1, 2 
HAVING count(1) > 1; 
+0

あなたはそれらの数字1,2とは何を意味するのか知りませんでしたが、あなたの応答のためにあなたのコードのように動作します:D –

+0

ここで ' 「2」は第1および第2の列を意味する。時として、数字を使用し、選択した列のリストを複製しないのが便利です。また、それらを 'ORDER'節で使用することもできます。 –

0

は、COLUMN_NAMEによってtable_nameのグループから選択します*;

関連する問題