sql - what - एसक्यूएल में दो पंक्तियों को मर्ज करें




what is sql (4)

आपके द्वारा शामिल किए गए कुछ डेटा नियमों के आधार पर कुछ तरीके हैं, लेकिन आपके द्वारा दिए गए कार्यों का उपयोग करने का एक तरीका यहां है।

SELECT
    t1.Field1,
    t2.Field2
FROM Table1 t1
    LEFT JOIN Table1 t2 ON t1.FK = t2.FK AND t2.Field1 IS NULL

दूसरा रास्ता:

SELECT
    t1.Field1,
    (SELECT Field2 FROM Table2 t2 WHERE t2.FK = t1.FK AND Field1 IS NULL) AS Field2
FROM Table1 t1

मान लीजिए मेरे पास एक सारणी है जिसमें निम्न जानकारी है:

FK | Field1 | Field2
=====================
3  | ABC    | *NULL*
3  | *NULL* | DEF

क्या कोई तरीका है कि मैं निम्नलिखित प्राप्त करने के लिए तालिका पर चयन कर सकता हूं

FK | Field1 | Field2
=====================
3  | ABC    | DEF

धन्यवाद

संपादित करें: स्पष्टता के लिए फ़ील्ड 2 नाम ठीक करें


कुल कार्य आपको यहां मदद कर सकते हैं। कुल कार्य NULLs अनदेखा NULLs (कम से कम यह SQL सर्वर, ओरेकल, और जेट / एक्सेस पर सत्य है), ताकि आप इस तरह की क्वेरी का उपयोग कर सकें (SQL सर्वर एक्सप्रेस 2008 R2 पर परीक्षण किया गया):

SELECT
    FK,
    MAX(Field1) AS Field1,
    MAX(Field2) AS Field2
FROM
    table1
GROUP BY
    FK;

मैंने MAX उपयोग किया, लेकिन कोई भी कुल जो GROUP BY पंक्तियों में से एक मान चुनता है, काम करना चाहिए।

परीक्षण डेटा:

CREATE TABLE table1 (FK int, Field1 varchar(10), Field2 varchar(10));

INSERT INTO table1 VALUES (3, 'ABC', NULL);
INSERT INTO table1 VALUES (3, NULL, 'DEF');
INSERT INTO table1 VALUES (4, 'GHI', NULL);
INSERT INTO table1 VALUES (4, 'JKL', 'MNO');
INSERT INTO table1 VALUES (4, NULL, 'PQR');

परिणाम:

FK  Field1  Field2
--  ------  ------
3   ABC     DEF
4   JKL     PQR

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। अंतर यह था कि मुझे जो कुछ भी लौटा रहा था उस पर मुझे अधिक नियंत्रण की आवश्यकता थी, इसलिए मैं एक साधारण स्पष्ट लेकिन लंबी क्वेरी के साथ समाप्त हुआ। यहां आपके उदाहरण के आधार पर इसका एक सरल संस्करण है।

select main.id, Field1_Q.Field1, Field2_Q.Field2
from 
(
    select distinct id
    from Table1
)as main
left outer join (
    select id, max(Field1)
    from Table1
    where Field1 is not null
    group by id
) as Field1_Q on main.id = Field1_Q.id
left outer join (
    select id, max(Field2)
    from Table1
    where Field2 is not null
    group by id
) as Field2_Q on main.id = Field2_Q.id 
;

यहां की चाल यह है कि पहला चयन 'मुख्य' प्रदर्शित करने के लिए पंक्तियों का चयन करता है। फिर आपके पास प्रति फ़ील्ड एक चयन है। जो भी शामिल हो रहा है वह 'मुख्य' क्वेरी द्वारा लौटाए गए सभी मानों को होना चाहिए।

चेतावनी दीजिये, उन अन्य प्रश्नों को प्रति आईडी केवल एक पंक्ति वापस करने की आवश्यकता है या आप डेटा को अनदेखा कर देंगे


यदि फ़ील्ड 1 कॉलम में एक पंक्ति का मूल्य है और अन्य पंक्तियों में शून्य मान है तो यह क्वेरी काम कर सकती है।

SELECT
  FK,
  MAX(Field1) as Field1,
  MAX(Field2) as Field2
FROM 
(
select FK,ISNULL(Field1,'') as Field1,ISNULL(Field2,'') as Field2 from table1
)
tbl
GROUP BY FK





union