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




what is sql (4)

कुल कार्य आपको यहां मदद कर सकते हैं। कुल कार्य 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

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

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

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

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

धन्यवाद

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


निएटर विधियां हो सकती हैं, लेकिन निम्नलिखित एक दृष्टिकोण हो सकता है:

SELECT    t.fk,
          (
             SELECT t1.Field1 
             FROM   `table` t1 
             WHERE  t1.fk = t.fk AND t1.Field1 IS NOT NULL
             LIMIT  1
          ) Field1,
          (
             SELECT t2.Field2
             FROM   `table` t2 
             WHERE  t2.fk = t.fk AND t2.Field2 IS NOT NULL
             LIMIT  1
          ) Field2
FROM      `table` t
WHERE     t.fk = 3
GROUP BY  t.fk;

परीक्षण का मामला:

CREATE TABLE `table` (fk int, Field1 varchar(10), Field2 varchar(10));

INSERT INTO `table` VALUES (3, 'ABC', NULL);
INSERT INTO `table` VALUES (3, NULL, 'DEF');
INSERT INTO `table` VALUES (4, 'GHI', NULL);
INSERT INTO `table` VALUES (4, NULL, 'JKL');
INSERT INTO `table` VALUES (5, NULL, 'MNO');

परिणाम:

+------+--------+--------+
| fk   | Field1 | Field2 |
+------+--------+--------+
|    3 | ABC    | DEF    |
+------+--------+--------+
1 row in set (0.01 sec)

WHERE t.fk = 3 खंड के बिना एक ही क्वेरी चलाना, यह निम्नलिखित परिणाम-सेट वापस करेगा:

+------+--------+--------+
| fk   | Field1 | Field2 |
+------+--------+--------+
|    3 | ABC    | DEF    |
|    4 | GHI    | JKL    |
|    5 | NULL   | MNO    |
+------+--------+--------+
3 rows in set (0.01 sec)

यदि फ़ील्ड 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

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

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






union