mohammed mqi Ответов: 1

Скопируйте таблицу в другую с условием и соедините


Я пытаюсь скопировать из таблицы в другую с условием и соединением, и когда я создал ее, я получаю ошибку.

INSERT INTO [ax].[WaitingKitchenStatus]
(
    [TRANSACTIONID]--1
    , [LineNote]--2
    , [Item]--3
    , [CreationDate]--4
    , [CreationTime]--5
    , [active]--6
    ,[Gruop]--7
)

SELECT ab.COMMENT
	,[ax].[ECORESPRODUCTTRANSLATION].[NAME]
    , ab.[ITEMID]
FROM ax.RetailTransactionSalesTrans ab
inner join [ax].[INVENTTABLE] on ab.[ITEMID] =[ax].[INVENTTABLE].[ITEMID]
inner join [ax].[ECORESPRODUCTTRANSLATION] on [ax].[INVENTTABLE].PRODUCT =[ax].[ECORESPRODUCTTRANSLATION].[PRODUCT]
LEFT JOIN ax.[WaitingKitchenStatus] a ON 
a.[TRANSACTIONID]=ab.COMMENT--1
and a.[LineNote]=[ax].[ECORESPRODUCTTRANSLATION].[NAME]--2
and a.[Item]=ab.[ITEMID]--3
and a.[CreationDate]=GETDATE()--4
and a.[CreationTime]= CONVERT(time, GETDATE())--5
and a.active= 1--6
and a.Gruop=''--7
where ab.TRANSACTIONSTATUS !=1
and ab.RECEIPTID !=''
and ab.COMMENT !=''
and NOT EXISTS(select * from ax.[WaitingKitchenStatus] where active= 1 and [TRANSACTIONID]=ab.COMMENT)


Я получил эту ошибку

Msg 120, Level 15, State 1, Line 1
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.


Что я уже пробовал:

я проверил из номера столбца да я копирую только 3 из таблицы но другой столбец не копирую из этой таблицы и даже я уже вставляю их

0x01AA

Какую магию вы ожидаете от SQL? Вы заявили, что вставляете 7 полей, но выбираете только 3. Спросите себя, как SQL должен решить эту проблему, какие значения должны быть вставлены для оставшихся 4 полей...

1 Ответов

Рейтинг:
10

OriginalGriff

Ваша вставка содержит 7 полей:

INSERT INTO [ax].[WaitingKitchenStatus]
(
    [TRANSACTIONID]--1
    , [LineNote]--2
    , [Item]--3
    , [CreationDate]--4
    , [CreationTime]--5
    , [active]--6
    ,[Gruop]--7
)

Но фактический выбор, который предоставляет информацию, предоставляет только 3:
SELECT ab.COMMENT
	,[ax].[ECORESPRODUCTTRANSLATION].[NAME]
    , ab.[ITEMID]
FROM ax.RetailTransactionSalesTrans ab
Система не будет "изобретать" данные. Либо поставить 4 NULL значения также или только перечислите столбцы, для которых вы предоставляете данные. (Я предполагаю, что вы только предоставляете LineNote и Item, плюс имя, которое не имеет очевидного столбца для его хранения, так что вы можете подумать о своих данных немного более тщательно.)


mohammed mqi

Итак, как я могу добавить другой столбец, который не нужно копировать из этой таблицы

OriginalGriff

- Прости?
Вам придется объяснить более подробно - помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.

mohammed mqi

я имею в виду если вы видите после того как заявление ушло
вы увидите, что я присваиваю значение остальным столбцам

и A.[CreationDate]=GETDATE()--4
и A.[CreationTime]= CONVERT(time, GETDATE())--5
а.активный= 1--6
и A.Gruop="--7

или это не сработает?!

0x01AA

Например, добавьте эти 4 поля в свой список. Select

OriginalGriff

Нет - это сравнения. Вставка добавляет только те столбцы, которые перечислены в списке SELECT перед первым предложением FROM. Если вам нужны эти данные, то попробуйте что-то вроде:

Выбор АБ.Комментарий
,[топор].[ЭКОРЕПРОДУКТТРАНСЛЯЦИЯ].[ИМЯ]
, ав.[Идентификатор элемента]
, функция GETDATE()
Преобразования(время, функцию getdate())
, 1
, ''
От ax.RetailTransactionSalesTrans ab
...

Или добавьте значения по умолчанию в определения столбцов таблицы и не перечисляйте их в списке вставка.