2016-02-23 8 views
9

だから私はこのようなものを持っています。結果は2つのテーブルへのクエリです。1つの列からのみ重複を削除する

+------------------+------------------------------------+ 
| character_name | title        | 
+------------------+------------------------------------+ 
| derp    | a         | 
| derp    | b         | 
| derp    | c         | 
| herp    | a         | 
| herp    | b         | 
| herp    | c         | 
+-------------------------------------------------------+ 

と、私はこの

+------------------+------------------------------------+ 
| character_name | title        | 
+------------------+------------------------------------+ 
| derp    | a         | 
|     | b         | 
|     | c         | 
| herp    | a         | 
|     | b         | 
|     | c         | 
+-------------------------------------------------------+ 

をしたい、これは可能ですか?

+0

ここで私の答えを参照できます:http://stackoverflow.com/questions/35125619/updating-column-in-sqlserver-based-on-values-from-another-column/35126041#35126041 –

+0

DISPLAY – SIDU

+0

の場合、character_name列の重複を削除したいだけです。 – isignisign

答えて

4

これはこの意味ですか?

select case when i.rnk = 1 THEN i.character_name ELSE '' END as NAME 
, i.title 
from(
    select * 
    , row_number() over (partition by character_name order by title) as rnk 
    from t1 
) i 
order by i.character_name 

ファーストネームには結果に表示される値1が表示されます。

アップデート - MySQLバージョン

SET @r_name:=''; 

select name, title FROM (
    select @r_name:=CASE WHEN @r_name = name THEN '' 
    ELSE name 
    END AS name 
    , @r_name:=name 
    , title 
    FROM 
    t1 
) t2 
+0

このクエリはmysql用です! – ashkufaraz

+0

@ashkufaraz私はタグに注意を払っていなかった、私は更新、感謝を追加しました。 – artm

2

あなたはそれがユーザー変数のアシストで行うことができます。

SQL:

SET @last_name = ''; 
SELECT 
    IF(switch_name, tbl2.character_name, '') character_name, 
    tbl2.title 
FROM 
    (
    SELECT 
     character_name, 
     title, 
     character_name != @last_name switch_name, 
     @last_name:=character_name 
    FROM 
     tbl 
    ) tbl2; 

結果:

mysql> SELECT character_name, title FROM tbl; 
+----------------+-------+ 
| character_name | title | 
+----------------+-------+ 
| derp   | a  | 
| derp   | b  | 
| derp   | c  | 
| herp   | a  | 
| herp   | b  | 
| herp   | c  | 
+----------------+-------+ 
6 rows in set (0.00 sec) 

mysql> SET @last_name = ''; 
Query OK, 0 rows affected (0.00 sec) 

mysql> 
mysql> SELECT 
    ->  IF(switch_name, tbl2.character_name, '') character_name, 
    ->  tbl2.title 
    -> FROM 
    ->  (
    ->  SELECT 
    ->   character_name, 
    ->   title, 
    ->   character_name != @last_name switch_name, 
    ->   @last_name:=character_name 
    ->  FROM 
    ->   tbl 
    -> ) tbl2; 
+----------------+-------+ 
| character_name | title | 
+----------------+-------+ 
| derp   | a  | 
|    | b  | 
|    | c  | 
| herp   | a  | 
|    | b  | 
|    | c  | 
+----------------+-------+ 
6 rows in set (0.00 sec) 
2

それはあなたの指定したテーブル

SELECT CASE 
    WHEN character_name ='derp' AND title ='a' THEN 'derp' 
    WHEN character_name ='derp' AND title ='b' THEN '' 
    WHEN character_name ='derp' AND title ='c' THEN '' 
    WHEN character_name ='herp' AND title ='a' THEN 'herp' 
    WHEN character_name ='herp' AND title ='b' THEN '' 
    WHEN character_name ='herp' AND title ='c' THEN '' 
    end as character_name, 
    title 
    from table_name; 

NOTEのために動作します:あなたのデータが動的であるかどうか、その後上記のようにしますあなたの望む結果を得るためにクエリを書き直し/最適化する必要があります。

関連する問題