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

Откуда: Königsberg in Preußen
Сообщений: 79
Имеются 2 таблицы:

t1:
id | k1 | k2 |
-------------
1 | 1 | 5 |
2 | 2 | 6 |
3 | 3 | 7 |
4 | 4 | null |

t2:
id | value |
-----------------------------------
1 | Ручка деревянная |
2 | Ручка металлическая; медная |
3 | Ручка деревянная; дуб |
4 | Ручка стеклянная |
5 | Бук |
6 | Медь |
7 | Дуб |

Необходимо составить запрос, который вернет результаты вида:
ID | Value |
-----------------------------------
1 | Ручка деревянная Бук |
2 | Ручка металлическая Медь |
3 | Ручка деревянная Дуб |
4 | Ручка стеклянная |

Если ранее обсуждалось, ткните где, найти такого примера не получилось
20 июл 11, 19:03    [11002405]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Super_DJ,

SELECT t1.ID, t2.Value,t2_2.Value
FROM t1
LEFT OUTER JOIN t2 
 ON t1.k1= t2.ID
LEFT OUTER JOIN t2 t2_2 
 ON t1.k1= t2_2.ID
20 июл 11, 19:08    [11002426]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
AmKad
Member

Откуда:
Сообщений: 5308
kapelan
Super_DJ,

SELECT t1.ID, t2.Value,t2_2.Value
FROM t1
LEFT OUTER JOIN t2 
 ON t1.k1= t2.ID
LEFT OUTER JOIN t2 t2_2 
 ON t1.k2= t2_2.ID
20 июл 11, 19:53    [11002603]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
AmKad
kapelan
Super_DJ,

SELECT t1.ID, t2.Value,t2_2.Value
FROM t1
LEFT OUTER JOIN t2 
 ON t1.k1= t2.ID
LEFT OUTER JOIN t2 t2_2 
 ON t1.k2= t2_2.ID

Это ясно, тут проблемм не возникло. Трудность с формированием строки такого вида: Ручка металлическая Медь.
В исходной таблице 2 значения: "Ручка металлическая; медная" и "Медь".
Тоесть нужно обрезать все что правее знака ";" если он есть, и собрать все в одну строку.
20 июл 11, 20:09    [11002670]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
Super_DJ
Тоесть нужно обрезать все что правее знака ";" если он есть, и собрать все в одну строку.
функция left, функция charindex, оператор +
20 июл 11, 23:11    [11003421]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
alexeyvg,

Простая задача, простой ответ, ато я уже накрутил...
Должно работать )
21 июл 11, 00:50    [11003790]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
alexeyvg
Super_DJ
Тоесть нужно обрезать все что правее знака ";" если он есть, и собрать все в одну строку.
функция left, функция charindex, оператор +

stuff работает лучше, но так же не переваривает строки где нет знака ";". Полагаю что charindex на них возвращает пустоту.
Есть идеи как это обойти?
21 июл 11, 10:23    [11004626]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Super_DJ, + CASE
21 июл 11, 10:30    [11004669]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
kDnZP,

а примерчик такой конструкции можно? что то я пробовал но никак...
21 июл 11, 10:36    [11004708]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
DECLARE @S VARCHAR(100)='12345678:abcd';
SELECT ISNULL(LEFT(@S, NULLIF(CHARINDEX(':',@S),0)-1),@S)+'xyz';
DECLARE @S VARCHAR(100)='12345678abcd';
SELECT ISNULL(LEFT(@S, NULLIF(CHARINDEX(':',@S),0)-1),@S)+'xyz';
21 июл 11, 10:41    [11004751]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Super_DJ,

DECLARE @tbl TABLE (f NVARCHAR(100))
INSERT INTO @tbl(f)
SELECT N'Ручка металлическая; медная'
UNION ALL
SELECT N'Ручка пластелиновая'

SELECT f,
CASE WHEN CHARINDEX(';',f)>0 THEN LEFT(f,CHARINDEX(';',f)-1) ELSE f END res
FROM @tbl
21 июл 11, 10:42    [11004755]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Super_DJ
Member

Откуда: Königsberg in Preußen
Сообщений: 79
kDnZP
Super_DJ,

DECLARE @tbl TABLE (f NVARCHAR(100))
INSERT INTO @tbl(f)
SELECT N'Ручка металлическая; медная'
UNION ALL
SELECT N'Ручка пластелиновая'

SELECT f,
CASE WHEN CHARINDEX(';',f)>0 THEN LEFT(f,CHARINDEX(';',f)-1) ELSE f END res
FROM @tbl

Спасибо! Все просто и наглядно.
21 июл 11, 10:52    [11004829]     Ответить | Цитировать Сообщить модератору
 Re: Select по ключам с null на другую таблицу и отработкой подстроки  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Вариант iap тоже хорош...
DECLARE @t1 table(id int, k1 int, k2 int)
INSERT INTO @t1 (id,k1,k2)
SELECT 1,1,5
UNION ALL
SELECT 2,2,6
UNION ALL
SELECT 3,3,7
UNION ALL
SELECT 4,4,null

SELECT * FROM @t1

DECLARE @t2 table (id int, value varchar(100));
INSERT INTO @t2 (id,value)
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,'Дуб'

SELECT * FROM @t2

SELECT t1.ID, 
       CASE WHEN t1.k2 is null THEN t2.Value
         ELSE ISNULL(LEFT(t2.Value, NULLIF(CHARINDEX(';',t2.Value),0)-1),t2.Value)+' '+t2_2.Value
       END as Value
FROM @t1 t1
LEFT OUTER JOIN @t2 t2
 ON t1.k1= t2.ID
LEFT OUTER JOIN @t2 t2_2 
 ON t1.k2= t2_2.ID
21 июл 11, 11:00    [11004916]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить