অন্য টেবিল থেকে নিষ্কাশিত টেবিলের রেকর্ডগুলিতে কীভাবে INSERT করবেন


177

আমি একটি কোয়েরি লেখার চেষ্টা করছি যা কোনও টেবিল থেকে ডেটা উত্তোলন করে এবং রূপান্তর করে এবং তারপরে সেই ডেটাটি অন্য টেবিলের মধ্যে sertোকান। হ্যাঁ, এটি একটি ডেটা গুদাম কোয়েরি এবং আমি এটি এমএস অ্যাক্সেসে করছি doing সুতরাং মূলত আমি এই জাতীয় কিছু জিজ্ঞাসা চাই:

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

আমি চেষ্টা করেছি তবে একটি সিনট্যাক্স ত্রুটি বার্তা পেয়েছি।

আপনি এটি করতে চাইলে আপনি কি করবেন?

উত্তর:


283

কোনও "VALUES", কোনও প্রথম বন্ধনী নেই:

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

11
আসলে যদি না। কলামগুলির এবং সেগুলির ধরণগুলি একই রকম হয় এবং সেগুলি টেবিলগুলিতে একই ক্রমে প্রস্থান করে তবে আপনি সহজেই বলতে পারেন, টেবিল 2 এর ভিতরে সারণি নির্বাচন করুন * টেবিল 1 থেকে নির্বাচন করুন;
23 এ ত্যাগ করুন

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

উভয় ভ্যালু এবং প্রথম বন্ধনী সরান।

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


10

আমি বিশ্বাস করি যে এই পরিস্থিতিতে আপনার সমস্যাটি হ'ল "মান" কীওয়ার্ড। আপনি যখন একটি মাত্র সারি ডেটা সন্নিবেশ করান তখন আপনি "মানগুলি" কীওয়ার্ডটি ব্যবহার করেন। কোনও নির্বাচনের ফলাফল সন্নিবেশ করার জন্য আপনার এটির দরকার নেই।

এছাড়াও, আপনার নির্বাচিত বিবৃতিটির আশেপাশে আপনার প্রথম বন্ধনী প্রয়োজন নেই।

এমএসডিএন থেকে :

একাধিক রেকর্ড সংযোজন ক্যোয়ারী:

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

একক রেকর্ড সংযোজন ক্যোয়ারী:

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

4

আপনি যখন সারিগুলির একটি গ্রুপ যুক্ত করছেন তখন "মানগুলি" সরান এবং অতিরিক্ত বন্ধনীগুলি সরিয়ে ফেলুন। আপনি গড় (মুদ্রাঙ্কন কলাম) এর জন্য একটি উপনাম ব্যবহার করে (বা আপনার উদাহরণে যেমন করেছিলেন) বা কোনও উপাধি ব্যবহার না করেই বিজ্ঞপ্তি রেফারেন্স এড়াতে পারবেন।

উভয় সারণীতে যদি কলামের নাম একই থাকে তবে আপনার ক্যোয়ারীটি এরকম হবে:

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

বিভিন্ন ডেটাবেসে ডেটা ফর্ম একটি টেবিলের অন্য টেবিলে

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 তৈরি করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.