Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
здравствуйте форумчане, помогите новичку оптимизировать запрос. Буду признателен. Долбался над ним 2 дня и он слава богу работает но он какой-то стрёмный.
Объясняю суть.
Есть таблица с где такие столбцы: id артикул товар категория подкатегория
Каждому товару имя и категория с подкатегорией. Таблица в которой хранятся категории состоит из ID Категория Подкатегория Артикул(подкатегории)
В чем вопрос?
Так вот артикулы и id у товаров генерируются сами. Артикулы генерируются по формуле
SELECT (
          (SELECT art
           FROM tblProductGroups
           WHERE ProductType = <ProductType>)+'-'+(RIGHT ('0000'+
                                                            (SELECT (ISNULL(
                                                                              ( SELECT (CAST ((cast(
                                                                                                      (SELECT RIGHT(
                                                                                                                      (SELECT MAX (ProductCode)
                                                                                                                       FROM tblMain
                                                                                                                       WHERE ProductType = <ProductType>), 4))AS int)+1)AS varchar(7)))), ''))),4))))

Я считаю что я бросился в крайность составляя такой запрос и есть менее мазахисткие методы. Мой метод заключается в том что запрос смотрит нет ли товара сзади если нету то присваивает артикул вида артикулгруппы-0000 если сзади есть товар этой категории то от его артикула отрезается номер то есть из XE-0054 отрезается 54 , потом увеличиваться на 1 и опять приделывается к артикулю категории. В общем помогите сделать всё проще. Задача такая. Нужны артикулы вида [A-Z][A-Z][0-9][0-9][0-9][0-9]
1 сен 12, 23:04    [13100291]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Kimel,

1 скобка вконце лишняя

И скину вот ещё что
USE [sKc4Ladsc2]
GO

/****** Object:  Table [dbo].[tblMain]    Script Date: 09/01/2012 22:09:31 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tblMain](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[ProductCode] [nvarchar](255) NULL,
	[Product] [nvarchar](255) NOT NULL,
	[ProductGroup] [nvarchar](255) NOT NULL,
	[ProductType] [nvarchar](255) NOT NULL,
	[Kit] [bit] NOT NULL,
	[BarCode] [nvarchar](255) NOT NULL,
	[Price] [money] NULL,
	[PriceOut1] [money] NULL,
	[PriceOut2] [money] NULL,
	[QuantityPerUnit] [nvarchar](255) NOT NULL,
	[Notes] [nvarchar](max) NOT NULL,
	[InPriceList] [bit] NOT NULL,
	[AddTime] [datetime] NULL,
	[Pic1] [image] NULL,
	[QuantutyPerUp] [int] NULL,
	[PriceUSD] [float] NULL,
 CONSTRAINT [PK_tblMain] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [Product]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [ProductGroup]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [ProductType]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ((0)) FOR [Kit]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [BarCode]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [QuantityPerUnit]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ('') FOR [Notes]
GO

ALTER TABLE [dbo].[tblMain] ADD  DEFAULT ((0)) FOR [InPriceList]
GO

USE [sKc4Ladsc2]
GO

/****** Object:  Table [dbo].[tblProductGroups]    Script Date: 09/01/2012 22:09:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[tblProductGroups](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[ProductGroup] [nvarchar](255) NOT NULL,
	[ProductType] [nvarchar](255) NOT NULL,
	[Art] [nvarchar](255) NOT NULL,
 CONSTRAINT [PK_tblProductGroups] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[tblProductGroups] ADD  DEFAULT ('') FOR [ProductGroup]
GO

ALTER TABLE [dbo].[tblProductGroups] ADD  DEFAULT ('') FOR [ProductType]
GO

ALTER TABLE [dbo].[tblProductGroups] ADD  DEFAULT ('') FOR [Art]
GO


Это create запросы для обоих таблиц
1 сен 12, 23:10    [13100305]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
артикулы шмартикулы
Guest
Kimel,

только первое сентября, а уже такие серьезные вопросы... и запросы.
1 сен 12, 23:46    [13100406]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
артикулы шмартикулы,

он не такой уж и серьёзный , я в сиквеле 2 недели самоучка просто хочу спросить правильно ли я сделал можо ли проще вот ивсё
1 сен 12, 23:59    [13100442]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Kimel,

Если потребуется товар переместить в другой ProductType, или один ProductType разбить на несколько, или объединить несколько ProductType в один, будете артикулы у товаров менять?
2 сен 12, 00:16    [13100487]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
invm,

ДА
2 сен 12, 00:32    [13100502]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Kimel
invm,

ДА
Жесть...
2 сен 12, 00:37    [13100509]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
invm
Kimel
invm,

ДА
Жесть...

я ничего не буду программа автоматом будет это делать но вероятность что прийдёться что-то разбивать удалять и так далятт около 0% так что не прийдёться
2 сен 12, 00:39    [13100514]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
WellSlava
Member

Откуда:
Сообщений: 207
Kimel
invm
пропущено...
Жесть...

я ничего не буду программа автоматом будет это делать но вероятность что прийдёться что-то разбивать удалять и так далятт около 0% так что не прийдёться


Не надейся на 0% - знаю по своему опыту (в программировании 14 лет). Необходимо сразу создавать базу правильно... Хотя смотря что за продукт и где будет использоваться, я то пишу проги для продаж.
2 сен 12, 01:44    [13100591]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
WellSlava,

Просто нужно что бы были артикулы красивые и последовательные. Я не шарю в этом. Решил каждой подкатегории задать артикул и если товар лежить в ней то от неё он и берётся. Я не знаю как это делается правильно. Вижу у людей красивые 6 значные артикулы сделал себе такой же..
2 сен 12, 01:58    [13100595]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
qwerty112
Guest
Kimel,

тоже считаю, что "фигнёй маетесь", с этим "что бы были артикулы красивые и последовательные" ...

так, что - это не руководство к действию, а просто ответ на сабж - "оптимизировать запрос"

select a.art+'-'
	+right('0000'+cast(isnull(max(cast(right(ProductCode, 4) as int)),0)+1 as varchar), 4) as xz
from tblProductGroups a
left join tblMain b
	on a.ProductType=b.ProductType
where a.ProductType = <ProductType>
group by a.art
2 сен 12, 07:37    [13100673]     Ответить | Цитировать Сообщить модератору
 Re: Как можно оптимизировать запрос selec(update)  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112,

Дело в том что мой запрос езе и с тригером программным работает. То есть при добавлении товара включается тригер который берет категорию прошлый артикул и создает новый. А можно ли ваш запрос так же приделать к нему?
2 сен 12, 17:37    [13101664]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить