2016-02-23 34 views
9

Vì vậy, tôi sẽ có một cái gì đó như thế này. Kết quả của nó là một truy vấn thành hai bảng.Xóa các từ khoá trùng lặp khỏi một cột chỉ

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

và tôi muốn điều này

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

Đây có phải là có thể?

+0

Bạn có thể tham khảo câu trả lời của tôi tại đây ==> http://stackoverflow.com/questions/35125619/updating-column-in-sqlserver-based-on-values-from-another-column/35126041#35126041 –

+0

Tôi đoán bạn đang cố gắng nói: loại bỏ các bản sao Khi DISPLAY – SIDU

+0

Tôi chỉ muốn loại bỏ các bản sao cho cột character_name. – isignisign

Trả lời

4

Đây có phải là ý của bạn không?

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 

Tên đầu tiên sẽ nhận được giá trị 1, mà bạn hiển thị trong kết quả, bất kỳ điều gì khác bạn ẩn.

Update - MySql phiên bản:

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

truy vấn này là dành cho mysql ?! – ashkufaraz

+0

@ashkufaraz Tôi đã không chú ý đến các thẻ, tôi đã thêm một bản cập nhật, cảm ơn. – artm

2

Bạn có thể làm điều đó với hỗ trợ của một biến người dùng.

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; 

Kết quả:

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

nó sẽ làm việc cho bảng cho bạn

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; 

Chú ý: nếu dữ liệu của bạn là động hay không như trình bày ở trên thì bạn phải viết lại/tối ưu hóa truy vấn để có được kết quả mong muốn của bạn.

Các vấn đề liên quan