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

Откуда: Украина
Сообщений: 22
Есть табличка типа этой:
DECLARE @t TABLE (d varchar(10) ,q INT);

INSERT @t VALUES
('Авто',2),
('Лодка' ,1),
('Самолет' ,4),
('Игрушка' ,NULL),
('Аппарат' ,3);


Результат запроса должен быть таким:
Авто
Авто
Лодка
Самолет
Самолет
Самолет
Самолет
Аппарат
Аппарат
Аппарат


Т.е. должно вывестись столько строк с названием, сколько указано в количестве.
26 июн 13, 11:20    [14484724]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
DECLARE @t TABLE (d varchar(10) ,q INT);

INSERT @t VALUES
('Авто',2),
('Лодка' ,1),
('Самолет' ,4),
('Игрушка' ,NULL),
('Аппарат' ,3);

SELECT t.d
FROM @t
JOIN master.dbo.values v ON v.type='P' AND t.q>v.number;



Результат запроса должен быть таким:
Авто
Авто
Лодка
Самолет
Самолет
Самолет
Самолет
Аппарат
Аппарат
Аппарат



Т.е. должно вывестись столько строк с названием, сколько указано в количестве.[/quote]
26 июн 13, 11:25    [14484759]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Что-то криво я оформил...
Но главное - это SELECT
26 июн 13, 11:26    [14484769]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Element2
Member

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

Спасибо!!!
SELECT t.d
FROM @t t
JOIN @t v ON t.q>=v.q
order by t.d
26 июн 13, 11:30    [14484799]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
qwerty112
Guest
Element2,

;with cte as
(select d, q, 1 as cur
from @t
where q>0

union all

select cte.d, cte.q, cte.cur+1
from cte 
where cte.q > cte.cur)

select * from cte order by 1
26 июн 13, 11:30    [14484800]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
qwerty112
Guest
Element2
iap,

Спасибо!!!
SELECT t.d
FROM @t t
JOIN @t v ON t.q>=v.q
order by t.d

бредяка !

это просто "повезло" с исх.данными
вот для такого выполни
INSERT @t VALUES
('Авто',2),
('Лодка' ,1),
('Самолет' ,4),
('Игрушка' ,NULL),
('Аппарат' ,10);
26 июн 13, 11:33    [14484828]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Element2
Member

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

ааа.. блин. Точно!
26 июн 13, 11:35    [14484841]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
А без рекурсии возможно решение?
26 июн 13, 12:11    [14485181]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Element2
А без рекурсии возможно решение?

Вам же выше предлагали:

DECLARE @t TABLE (d varchar(10) ,q INT);

INSERT @t 
SELECT
'Авто',2 
UNION SELECT
'Лодка' ,1 
UNION SELECT
'Самолет' ,4 
UNION SELECT
'Игрушка' ,NULL 
UNION SELECT
'Аппарат' ,3

SELECT t.d
FROM @t t JOIN master.dbo.spt_values v ON v.type='P' AND t.q>v.number
26 июн 13, 12:14    [14485217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Сергей Викт.
Element2
А без рекурсии возможно решение?

Вам же выше предлагали:

DECLARE @t TABLE (d varchar(10) ,q INT);

INSERT @t 
SELECT
'Авто',2 
UNION SELECT
'Лодка' ,1 
UNION SELECT
'Самолет' ,4 
UNION SELECT
'Игрушка' ,NULL 
UNION SELECT
'Аппарат' ,3

SELECT t.d
FROM @t t JOIN master.dbo.spt_values v ON v.type='P' AND t.q>v.number
Только хорошо бы вместо master.dbo.spt_values использовать собственную таблицу с числами.
26 июн 13, 12:27    [14485336]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
iap
Сергей Викт.
пропущено...

Вам же выше предлагали:

DECLARE @t TABLE (d varchar(10) ,q INT);

INSERT @t 
SELECT
'Авто',2 
UNION SELECT
'Лодка' ,1 
UNION SELECT
'Самолет' ,4 
UNION SELECT
'Игрушка' ,NULL 
UNION SELECT
'Аппарат' ,3

SELECT t.d
FROM @t t JOIN master.dbo.spt_values v ON v.type='P' AND t.q>v.number
Только хорошо бы вместо master.dbo.spt_values использовать собственную таблицу с числами.

безусловно. Но как пример, думаю, вполне пойдёт:) Дальше, если моск имеется, то автор додумает.
26 июн 13, 12:28    [14485347]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Element2
Member

Откуда: Украина
Сообщений: 22
ок. Если так, с запасом, то запрос будет такой:
SELECT t.d
FROM @t t 
JOIN 
(
SELECT 100*a+10*b+c q FROM 
 (  SELECT 0 a UNION ALL
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9) x 
  CROSS JOIN 
 (  SELECT 0 b UNION ALL
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9) y 
  CROSS JOIN 
 (  SELECT 0 c UNION ALL
    SELECT 1 UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9) z 
) v 
ON t.q>v.q
order by t.d

Всем спасибо!
26 июн 13, 13:11    [14485827]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить