किसी अन्य तालिका से निकाले गए तालिका रिकॉर्ड में INSERT कैसे करें


177

मैं एक क्वेरी लिखने की कोशिश कर रहा हूं जो किसी तालिका से डेटा को निकालता है और परिवर्तित करता है और फिर उन डेटा को किसी अन्य तालिका में सम्मिलित करता है। हां, यह एक डेटा वेयरहाउसिंग क्वेरी है और मैं इसे MS Access में कर रहा हूं। इसलिए मूल रूप से मैं इस तरह से कुछ क्वेरी चाहता हूं:

INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
  (SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);

मैंने कोशिश की लेकिन एक सिंटैक्स त्रुटि संदेश मिलता है।

यदि आप ऐसा करना चाहते हैं तो आप क्या करेंगे?

जवाबों:


283

कोई "मूल्य" नहीं, कोई कोष्ठक नहीं:

INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;

11
वास्तव में यदि नहीं। कॉलम और उनके प्रकार समान हैं और जो तालिका में समान क्रम में बाहर निकलते हैं, तो आप बस कह सकते हैं, INSERT INTO Table2 का चयन करें * तालिका 1 से;
संचिति

28

आपके पास दो सिंटैक्स विकल्प हैं:

विकल्प 1

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

CREATE TABLE Table2 (
    id int identity(1, 1) not null,
    LongIntColumn2 int,
    CurrencyColumn2 money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)

INSERT INTO Table2
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1

विकल्प 2

CREATE TABLE Table1 (
    id int identity(1, 1) not null,
    LongIntColumn1 int,
    CurrencyColumn money
)

INSERT INTO Table1 VALUES(12, 12.00)
INSERT INTO Table1 VALUES(11, 13.00)


SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1
INTO Table2
FROM Table1
GROUP BY LongIntColumn1

ध्यान रखें कि विकल्प 2 प्रक्षेपण पर केवल स्तंभों (चयन पर) के साथ एक तालिका बनाएगा।


24

VALUES और कोष्ठक दोनों निकालें।

INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1


10

मेरा मानना ​​है कि इस उदाहरण में आपकी समस्या "मान" कीवर्ड है। आप "मान" कीवर्ड का उपयोग करते हैं जब आप केवल एक पंक्ति डेटा सम्मिलित कर रहे होते हैं। चयन के परिणामों को सम्मिलित करने के लिए, आपको इसकी आवश्यकता नहीं है।

इसके अलावा, आपको वास्तव में चयन कथन के आसपास कोष्ठक की आवश्यकता नहीं है।

से MSDN :

एकाधिक-रिकॉर्ड परिशिष्ट क्वेरी:

INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression

एकल-रिकॉर्ड परिशिष्ट क्वेरी:

INSERT INTO target [(field1[, field2[, …]])]     
VALUES (value1[, value2[, …])

4

"मान" निकालें जब आप पंक्तियों के समूह को जोड़ रहे हैं, और अतिरिक्त कोष्ठक हटा दें। आप avg (CurrencyColumn) के लिए एक उपनाम का उपयोग करके परिपत्र संदर्भ से बच सकते हैं (जैसा कि आपने अपने उदाहरण में किया था) या एक उपनाम का उपयोग न करके।

यदि स्तंभ नाम दोनों तालिकाओं में समान हैं, तो आपकी क्वेरी इस तरह होगी:

INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;

और यह एक उपनाम के बिना काम करेगा:

INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;

2

वैसे मुझे लगता है कि 2 रिकॉर्ड को परिभाषित करने और उन्हें 2 तालिकाओं के बीच एक मध्यवर्ती के रूप में उपयोग करने का सबसे अच्छा तरीका (होगा?) होगा।

  1. दोनों रिकॉर्ड खोलें
  2. पहली तालिका से डेटा निकालें (चयन ब्लाब्लाब्ला)
  3. पहले रिकॉर्डसेट में उपलब्ध डेटा के साथ दूसरा रिकॉर्ड अपडेट करें (या तो नए रिकॉर्ड जोड़कर या मौजूदा रिकॉर्ड को अपडेट करके
  4. दोनों रिकॉर्ड बंद कर दें

यह विधि विशेष रूप से दिलचस्प है यदि आप अलग-अलग डेटाबेस से तालिकाओं को अपडेट करने की योजना बनाते हैं (यानी प्रत्येक रिकॉर्डसेट का अपना कनेक्शन हो सकता है ...)


2

अलग DATABASE में डेटा तालिका एक तालिका से दूसरी तालिका में सम्मिलित करना

insert into DocTypeGroup 
    Select DocGrp_Id,DocGrp_SubId,DocGrp_GroupName,DocGrp_PM,DocGrp_DocType 
    from Opendatasource( 'SQLOLEDB','Data Source=10.132.20.19;UserID=sa;Password=gchaturthi').dbIPFMCI.dbo.DocTypeGroup

1

क्या आप किसी मौजूदा तालिका में निष्कर्षण सम्मिलित करना चाहते हैं?

यदि इससे कोई फर्क नहीं पड़ता है, तो आप नीचे दिए गए प्रश्न को आजमा सकते हैं:

SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1 
GROUP BY LongIntColumn1);

यह निकाली गई जानकारी के साथ एक नया टेबल -> टी 1 बनाएगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.