2008-09-16 13 views
148

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

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

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

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

उत्तर

238

नहीं "मान", कोई कोष्ठक:

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

वास्तव में यदि कोई नहीं है तो एक और तालिका। कॉलम और उनके प्रकार समान हैं और वे टेबल में उसी क्रम में निकलते हैं, तो आप बस कह सकते हैं, तालिका 2 में शामिल करें * तालिका 1 से चुनें; – sactiw

9

अपने SQL से VALUES हटाएं।

18

दोनों मूल्यों और कोष्ठक निकालें।

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

आप दो वाक्य रचना विकल्प हैं:

विकल्प 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 के साथ एक मेज पैदा करेगा केवल कॉलम प्रक्षेपण (चयन पर उन लोगों) पर।

2

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

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

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

7

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

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

msdn से:

एकाधिक रिकॉर्ड संलग्न क्वेरी:

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

एकल रिकॉर्ड संलग्न क्वेरी:

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

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

यह नहीं बात तो आप नीचे दिए गए क्वेरी की कोशिश कर सकते है, तो:

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

यह एक नया टेबल बना सकते हैं - जब आप जोड़ रहे हैं

2

निकालें "मूल्यों" निकाली गई जानकारी के साथ> टी 1 पंक्तियों का एक समूह, और अतिरिक्त कोष्ठक हटा दें। आप 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; 
1

डालने डेटा प्रपत्र एक मेज पर विभिन्न डाटाबेस

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 
संबंधित मुद्दे

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