Показать сообщение отдельно
Старый 01.02.2023, 17:47   #1  
mira is offline
mira
Участник
Аватар для mira
 
140 / 25 (1) +++
Регистрация: 18.03.2007
Адрес: Москва
Хранимка, INSERT INTO ..SELECT (с GROUP by!!!), значение Line No
Всем добрый день!

1.Выгрузка для маркетплейса из выделенных в списке перемещений. Заказчик хочет группировку товаров по артикулу+цвету.
Данные беру хранимкой и пишу в таблицу, в которой первичный ключ Document Type,Document No.,Line No_.
Не могу корректно определить Line No_ в строке.

Вот так ругается при выгрузке
Violation of PRIMARY KEY constraint 'ххх$Export Documents$0'. Cannot insert duplicate key in object 'dbo.ххх$Export Documents'.

2.Сделала вот такую фн:
USE [ххх]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <ххх>
-- Create date: <2023-01-26, ,>
-- Description: <нужна в хп [dbo].[rnd_export22y_transfer_group], где строки перемещ групп по артик товара+цвет и запись в т 50124 с ключом ... Строка Но>
-- #SC-хх 2023-01-16 Выгрузка
-- =============================================
ALTER FUNCTION [dbo].[GetLineNo]
(
@LastLineNo int
)
RETURNS int
AS
BEGIN
RETURN (@LastLineNo + 10000)
END


в хп
SET @line = 10000

Дальше надо как-то @line впихнуть в конструкцию

INSERT INTO [ххх].[dbo].[ххх$Export Documents]
([Document Type]
,[Document No_]
......
SELECT @Type --(<Document Type, int,>
,@docGroup --docNo--<Document No_, varchar(30),>
,1--<State, int,>
,sl.[Shipment Date]--<DateTime, datetime,>
,sl.[Document No_]--<Vender, varchar(100),>
..........
Что-то типа , @line = (select [dbo].[GetLineNo] (@line) )
чтобы и @line увеличилось, и в новую запись пошло увеличенное значение.

Не получается использовать фн [dbo].[GetLineNo] ! (((((

3. Я извернулась вот так:

, (SELECT top 1 FLOOR(RAND(ART2.[Qty])*(ART2.[Line No_]))+ FLOOR(RAND(ART2.[Line No_])*(ART2.[Qty]))) [Line No]

ART2.[Line No_] при группировке сумм по всем лайнам)))
а ART2.[Qty] - по всем количествам в строках

Пока работает.

Может, кто-то решал подобную задачу, и может поделиться опытом?

Спасибо!

Последний раз редактировалось mira; 01.02.2023 в 17:54.