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

Откуда: Украина
Сообщений: 334
Уважаемые участники форума. Помогите пожалуйста решить это тяжелую для меня проблему. MMSQL 2008. В sql 2 недели.
Каждый продукт имеет свою группу, а в группе тип продукта.
Гвоздь заключается в том что сейчас выход выглядит так.
IDProductCodeProductProductGroupProductTypePrice
1XN-0038Лампы Xenon (пара) H1 4300K (запасные)Товары для автоЛампы Xenon106.21
2XN-0039Xenon блок питания 35W 12V 1штукаТовары для автоЛампы Xenon114.38

А нужно что бы было так.
Категория
!Подкатегероия
Товар Цена остальные параметры

То есть примерно так
АртикулНаименование
Зарядные и пусковые устройства
Сварочные аппараты
!Аргонно-дуговая сварка
!Контактная сварка
!Контактно-точечная сварка
!Сварочные инверторы
!Сварочные полуавтоматы
Сварочные маски
!Маски ХАМЕЛЕОН
Щитки для болгарки
XE-001kilka
Очки
!Очки защитные
XE-002lol
!Очки защитные газосварочные
XE-003очко

Я всё утрировал, столбцов намного больше но меня именно интересует как сделать из как из
1234
ABCD

12
C
D
AB
1 сен 12, 13:28    [13099219]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
умееш же ты спрсить ...

select Артикул, Наименование
from

(select null as Артикул, ProductGroup as Наименование, ProductGroup as orderby
from  Гвоздь 

union 

select null, ProductType, ProductGroup + char(9) + ProductType
from  Гвоздь 

union 

select ProductCode, Product, ProductGroup + char(9) + ProductType + char(9) + Product
from  Гвоздь ) a

order by 3


если ProductGroup и ProductType - заданны кодами, тогда можно сделать "по-нормальней"
1 сен 12, 13:59    [13099293]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

Спасибо за помощь.
Все столбцы заданы как varchar.
Есть столбец ID он int.
Но кажется я забыл упомянуть вот что. В таблице пару тысяч строк. Выглядит это вод так
1234
ABCD
XYCD
HGMN
TRMN
EQMI



А потом должно вод так


12
C
!D
AB
XY
M
!N
HG
TR
!I
EQ

Где 1 Артикул 2 Наименование продукта(а во второй таблице и категории), 3 Категория, 4 Подкатегория
Есть ещё и цены. Наличие цыны и артикула отличает ГЛАВНУЮ категорию от товара. А вот подкатегорию отличает ! знак перед её именем.
Очень всё запутано но я прошу меня понять, я представляю это в виде цыкла Где берётся имя категории первого продукта, потом его подкатегория, потом его имя, потом проверка если сзади стоит продукт с такой же категорий то нужно поставить следующий продукт если нет то подкатегорию если её нет то основную категорию. B так пока не дойдёт до последнего ID, а ID в предачу идут не по порядку и выравнивание столбцов лучше сделать изначаль по категория а потом пронумеровать заного/ Задача для меня слишкм трудна, но я это делаю вот для чего/ Есть программа торговли, и нужно делать экспорт парайса на сайт, а на сайте совсем другой формат оформления, если ошибиться то всё сьедет на сайте/ Вот так вот.
Очень прошу помощи так как по пустякам я бы низачто не обратился. Я не знаю такой функции которая бы сумела так сделать.
[/quot]
1 сен 12, 18:40    [13099691]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

И вообще тут Select годиться только в качестве подзапроса, не правильно назвал топик, тут нужны курсоры и временная таблица скорее всего
1 сен 12, 18:52    [13099716]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
Kimel
Kimel,

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

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

вот тут - 13099293 запрос, который делает то что тебе нужно
что не понятно ? как к ProductType дописать "!" ?
вот так
select null, '!'+ProductType, ...


К сообщению приложен файл. Размер - 19Kb
1 сен 12, 19:31    [13099797]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

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

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

вот тут - 13099293 запрос, который делает то что тебе нужно
что не понятно ? как к ProductType дописать "!" ?
вот так
select null, '!'+ProductType, ...

Извените, я действительно его не понял. Какой-то Гвоздь.. Если вам не трудно то перепишете под конкретный пример выше, а то я запутался. Спасибо!
1 сен 12, 19:42    [13099815]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
Kimel
Извените, я действительно его не понял. Какой-то Гвоздь.. Если вам не трудно то перепишете под конкретный пример выше, а то я запутался. Спасибо!

Гвоздь - это имя исходной таблицы,
той что тут
Kimel
Каждый продукт имеет свою группу, а в группе тип продукта.
Гвоздь заключается в том что сейчас выход выглядит так.
IDProductCodeProductProductGroupProductTypePrice
1XN-0038Лампы Xenon (пара) H1 4300K (запасные)Товары для автоЛампы Xenon106.21
2XN-0039Xenon блок питания 35W 12V 1штукаТовары для автоЛампы Xenon114.38
1 сен 12, 19:52    [13099837]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
Я попытался его интегрировать под свои нужды, почти получилось, но я не понимаю как он работает? я бы до такого никогда не додумался, я делал через цикл...
1 сен 12, 19:52    [13099838]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

вот код
select ProductCode, Product
from

(select null as ProductCode, ProductGroup as Product, ProductGroup as orderby
from  qdfMain 

union 

select null, ProductType, ProductGroup + char(9) + ProductType
from  qdfMain 

union 

select ProductCode, Product, ProductGroup + char(9) + ProductType + char(9) + Product
from  qdfMain ) as ProductName

Это ваш код. К сожелению работает абсолютно не правильно(
1 сен 12, 20:08    [13099874]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
Kimel
Это ваш код. К сожелению работает абсолютно не правильно(

мне стыдно,
пишу эти слова, стоя в углу и плача


это не мой код
в моём был order by 3
1 сен 12, 20:13    [13099883]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112
Kimel
Это ваш код. К сожелению работает абсолютно не правильно(

мне стыдно,
пишу эти слова, стоя в углу и плача


это не мой код
в моём был order by 3

select ProductCode, Product
from

(select null as ProductCode, ProductGroup as Product, ProductGroup as orderby
from  qdfMain 

union 

select null, ProductType, ProductGroup + char(9) + ProductType
from  qdfMain 

union 

select ProductCode, Product, ProductGroup + char(9) + ProductType + char(9) + Product
from  qdfMain ) a
order by 3

Вот чучуть переделаный код
Вот ошибка Сообщение 108, уровень 16, состояние 1, строка 16
Номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.

Может быть я опять что-то забыл?
1 сен 12, 20:25    [13099915]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
Kimel
Может быть я опять что-то забыл?

нет, теперь я

вот так

order by orderby
1 сен 12, 20:27    [13099921]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Kimel
Вот чучуть переделаный код
Вот ошибка Сообщение 108, уровень 16, состояние 1, строка 16
Номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.

Может быть я опять что-то забыл?
Что вам непонятно??????????????

Вы просите сортировать по колонке номер 3, а у вас их всего ДВЕ!!!
1 сен 12, 20:28    [13099923]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
qwerty112
Kimel
Может быть я опять что-то забыл?

нет, теперь я

вот так

order by orderby

Хммм магия какая-то работает но пока я не понял как... А именно не понял зачем char(9)
Спасибо вам буду сидеть, думаю за часок дойдёт как работает)
1 сен 12, 20:29    [13099926]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

Откуда: Украина
Сообщений: 334
alexeyvg
Kimel
Вот чучуть переделаный код
Вот ошибка Сообщение 108, уровень 16, состояние 1, строка 16
Номер позиции 3 для ORDER BY находится за пределами диапазона номеров позиций в списке выбора.

Может быть я опять что-то забыл?
Что вам непонятно??????????????

Вы просите сортировать по колонке номер 3, а у вас их всего ДВЕ!!!

Я понимаю что их 2, я не понимаю что нужно было вместо 3 ставить, так как если ставить 2 или 1 то получается бред, но сейчас мне всё объяснили и всё работает
1 сен 12, 20:31    [13099934]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

нет, теперь я

вот так

order by orderby

Хммм магия какая-то работает но пока я не понял как... А именно не понял зачем char(9)
Спасибо вам буду сидеть, думаю за часок дойдёт как работает)

Всё работало отлично пока я не заметил такую проблему. Я когда-то говорил что id не последовательны и это вылилось в то что те записи которые были в конце они правильно рассортировать, а те которые в начале даже не были затронуты хотя они и принадлежат одной и той же категории, скажите как с этим справиться? row number слыхал какая-то функция есть... Может быть вы знаете?
1 сен 12, 20:48    [13099979]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
qwerty112
Guest
Kimel
Всё работало отлично пока я не заметил такую проблему. Я когда-то говорил что id не последовательны и это вылилось в то что те записи которые были в конце они правильно рассортировать, а те которые в начале даже не были затронуты хотя они и принадлежат одной и той же категории, скажите как с этим справиться? row number слыхал какая-то функция есть... Может быть вы знаете?

так ведь нет нигде сортировки по id,
везде сортировка по наименованию продукта/группы/типа продукта

если речь про продукты (а НЕ группы / тип продукта), то можно изменить, как-то так, вот это
select ProductCode, Product, ProductGroup + char(9) + ProductType + char(9) + right('0000000000'+cast(ID as varchar), 10)
from  Гвоздь ) a

будет идти сортировка продуктов по id в рамках группы и тип продукта

если я неправильно понял, показуй на примере, что не правильно сортирует и как должно быть "правильно"
1 сен 12, 21:19    [13100065]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

Всё отлично работает, я полностью разобрался. Единственное не понял что это что значит какой-то странный оператор a вконце, я его в bol не нашёл а так всё супер
1 сен 12, 23:19    [13100343]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31912
Kimel
Единственное не понял что это что значит какой-то странный оператор a вконце, я его в bol не нашёл
Какой оператор?
2 сен 12, 11:57    [13100965]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить нестандартный запрос select  [new]
Kimel
Member

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

A orderby order by оператор "a"
2 сен 12, 17:35    [13101653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить