Jak zrobić wstawianie do tabeli rekordów wyodrębnionych z innej tabeli
Próbuję napisać zapytanie, które wyodrębnia i przekształca dane z tabeli, a następnie wstawia je do innej tabeli. Tak, to jest zapytanie do hurtowni danych i robię to w MS Access. Więc w zasadzie chcę jakieś zapytanie takie jak to:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2) VALUES
(SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1);
Próbowałem, ale otrzymałem komunikat o błędzie składni.
Co byś zrobił, gdybyś tego chciał?9 answers
Brak "wartości" , brak nawiasu:
INSERT INTO Table2(LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 FROM Table1 GROUP BY LongIntColumn1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:23:34
Masz dwie opcje składni:
Opcja 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
Opcja 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
Należy pamiętać, że opcja 2 utworzy tabelę zawierającą tylko kolumny na projekcji (te na SELECT).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:25:51
Usuń obie wartości i nawias.
INSERT INTO Table2 (LongIntColumn2, CurrencyColumn2)
SELECT LongIntColumn1, Avg(CurrencyColumn) FROM Table1 GROUP BY LongIntColumn1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:24:34
Usuń {[0] } z twojego SQL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:23:01
Uważam, że Twoim problemem w tym przypadku jest słowo kluczowe "values". Używasz słowa kluczowego "values", gdy wstawiasz tylko jeden wiersz danych. Do wstawiania wyników select nie jest potrzebny.
Poza tym, naprawdę nie potrzebujesz nawiasów wokół instrukcji select.
From msdn :
Zapytanie o dołączenie wielu rekordów:
INSERT INTO target [(field1[, field2[, …]])] [IN externaldatabase]
SELECT [source.]field1[, field2[, …]
FROM tableexpression
Zapytanie o dołączenie pojedynczego rekordu:
INSERT INTO target [(field1[, field2[, …]])]
VALUES (value1[, value2[, …])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 18:22:21
Usuń "wartości" podczas dodawania grupy wierszy i usuń dodatkowe nawiasy. Możesz uniknąć okrężnego odniesienia, używając aliasu dla avg (CurrencyColumn) (tak jak w twoim przykładzie) lub nie używając aliasu w ogóle.
Jeśli nazwy kolumn są takie same w obu tabelach, Twoje zapytanie będzie takie:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn) as CurrencyColumn1
FROM Table1
GROUP BY LongIntColumn;
I to by działało bez aliasu:
INSERT INTO Table2 (LongIntColumn, Junk)
SELECT LongIntColumn, avg(CurrencyColumn)
FROM Table1
GROUP BY LongIntColumn;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-15 05:08:15
Cóż myślę, że najlepszym sposobem będzie (będzie?) do zdefiniowania 2 zestawów rekordów i wykorzystania ich jako pośrednika między 2 tabelami.
- Otwórz oba zestawy rekordów
- Wyodrębnij dane z pierwszej tabeli (wybierz blablabla)
- zaktualizuj drugi zestaw rekordów o dane dostępne w pierwszym zestawie rekordów (dodając nowe rekordy lub aktualizując istniejące rekordy
- Zamknij oba zestawy rekordów
Ta metoda jest szczególnie interesująca, jeśli planujesz aktualizować tabele z różne bazy danych (tzn. każdy zestaw rekordów może mieć własne połączenie ...)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 16:27:05
Wstawianie danych z jednej tabeli do innej tabeli w innej bazie danych
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 18:14:37
Czy chcesz wstawić ekstrakcję do istniejącej tabeli?
Jeśli to nie ma znaczenia, możesz wypróbować poniższe zapytanie:
SELECT LongIntColumn1, Avg(CurrencyColumn) as CurrencyColumn1 INTO T1 FROM Table1
GROUP BY LongIntColumn1);
Utworzy nową tabelę - > T1 z wyodrębnionymi informacjami
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-02 07:00:04