2016-02-23 6 views
9

तो मेरे पास ऐसा कुछ होगा। इसका परिणाम दो तालिकाओं में एक प्रश्न है।केवल एक कॉलम से डुप्लिकेट को हटाकर

+------------------+------------------------------------+ 
| 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

आप इसे एक उपयोगकर्ता चर के सहायता के साथ क्या कर सकते हैं।

एसक्यूएल:

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; 

नोट के लिए काम करेंगे: तो ऊपर दिखाए गए के रूप में यदि आपके डेटा गतिशील है या नहीं आप अपना वांछित परिणाम प्राप्त करने के लिए क्वेरी को फिर से लिखना/अनुकूलित करना होगा।

संबंधित मुद्दे