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

Откуда:
Сообщений: 88
таблица A1
id | n1
------------
1 | test1
2 | test2
3 | test3

таблица B1
id | n2
------------
1 | 1
2 | 2
3 | 1, 2

как вывести запрос В2 вида
id | n3
1 | test1
2 | test2
3 | test1, test2

Заранее спасибо
30 сен 16, 11:12    [19727041]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
buven
Member

Откуда:
Сообщений: 792
Esentuki,

FAQ
30 сен 16, 11:16    [19727065]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
buven, Я смотрел это не тот случай
30 сен 16, 11:18    [19727082]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
правильный проходящий.
Guest
Esentuki
buven, Я смотрел это не тот случай
Это тот случай. Просто надо немного подумать и данные таки нормализовать, чтобы они подошли под этот случай.
30 сен 16, 11:26    [19727145]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
Я посидел подумал но ничего не придумал кроме этого но это не правильно
SELECT B1.id,
(SELECT A1.n1 + ', '
FROM A1, B1
WHERE (A1.id IN (B1.N2) FOR xml path(''))
FROM B1
30 сен 16, 11:55    [19727429]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
мне просто для таблицы В1 нужно заменить в поле n2 числа на значения в таблице A1 n1
30 сен 16, 12:28    [19727658]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Esentuki,

архитектора базы укусить за глаз... пробуйте через динамику сначала забрать потом развернуть в строку
30 сен 16, 12:30    [19727682]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
buven
Member

Откуда:
Сообщений: 792
Esentuki,
Вам нужно из

таблица B1
id | n2
------------
1 | 1
2 | 2
3 | 1, 2

Получить

таблица B1
id | n2
------------
1 | 1
2 | 2
3 | 1
3 | 2

И тогда сработает FAQ.
30 сен 16, 12:36    [19727708]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
982183
Member

Откуда: VL
Сообщений: 3386
юмор:
UPDATE B1 SET N2='test1' WHERE N2 LIKE '1' 
UPDATE B1 SET N2='test2' WHERE N2 LIKE '2' 
UPDATE B1 SET N2='test3' WHERE N2 LIKE '3' 
30 сен 16, 12:38    [19727716]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
982183
юмор:
UPDATE B1 SET N2='test1' WHERE N2 LIKE '1' 
UPDATE B1 SET N2='test2' WHERE N2 LIKE '2' 
UPDATE B1 SET N2='test3' WHERE N2 LIKE '3' 

смешно, не умение пользоваться LIKE это смешно :)
30 сен 16, 12:40    [19727727]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Esentuki
Давайте закроем тему дабы не раздувать самолюбие задрот#в отвечающих: "почитай там". и прочих петросянов

так если читать не хотите, то вы форумом ошиблись, рядом есть раздел "Работа"
30 сен 16, 12:52    [19727813]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
Уважаемый я почитал. привел пример своего решения, не получилось отписался...
Посыпались хуевы юмористы, вывод сидеть до утра читать? я не кричу на весь форум дайте решение, но я не знаю как сделать. И вместо того чтобы натолкнуть на мысль все юморят сидят? Мой вывод ?
30 сен 16, 13:00    [19727874]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Esentuki
Уважаемый я почитал. привел пример своего решения, не получилось отписался...
Посыпались хуевы юмористы, вывод сидеть до утра читать? я не кричу на весь форум дайте решение, но я не знаю как сделать. И вместо того чтобы натолкнуть на мысль все юморят сидят? Мой вывод ?

чем вас не устраивает написанное
автор
пробуйте через динамику сначала забрать потом развернуть в строку
30 сен 16, 13:03    [19727898]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
Если бы я знал как это сделать я бы не задавал вопросов, можно было ответить "А попробуйте сначала правильно код написать"!
30 сен 16, 13:05    [19727932]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
buven
Member

Откуда:
Сообщений: 792
Esentuki,
Не забывайте, что отсутствие результата - тоже результат.
Если вам не дали сразу ответ, значит задача нетривиальная и у многоопытных местных форумчан в практике не встречалась.
Вполне возможно ваша задача не реляционная. Вполне возможно, что нужно идти не от самих условий, а от изменения этих самых условий. Переписать клиент, например, чтобы писал в нормализованную БД, а не в то что вы имеете сейчас.
Тратить время на прикрепление костыля к отвратительной архитектуре никто не хочет. Даже если кто-то на это решится - это будет еще один гвоздь в крышке гроба вашего приложения. Отсюда и ответы пространные.
30 сен 16, 13:37    [19728256]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
текстов сотни тысяч, позиция не хочу искать...
как вариант
DECLARE @Sql VARCHAR(MAX) = ''

SELECT @SQL += 
	'SELECT '+ CAST(Id as VARCHAR(5)) +' as xId, Code FROM A1	a WHERE  Id IN (' + Code + ') UNION ALL '
FROM B1 

SET @Sql = SUBSTRING(@SQL,1,LEN(@SQL) - LEN('UNION ALL '))

DECLARE @T TABLE 
(
	Id	INT,
	Code	VARCHAR(500)
)

INSERT INTO @T 
EXEC (@SQL) 

SELECT Id,
       (SELECT Code + ','  FROM @T a WHERE a.Id = B1.Id ORDER BY Code FOR XML PATH('')) AS Txt
FROM B1

наверное можно сразу через xml решить но я не умею :)
30 сен 16, 13:46    [19728340]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
правильный проходящий.
Guest
Esentuki
Уважаемый я почитал. привел пример своего решения, не получилось отписался...
Посыпались хуевы юмористы, вывод сидеть до утра читать? я не кричу на весь форум дайте решение, но я не знаю как сделать. И вместо того чтобы натолкнуть на мысль все юморят сидят? Мой вывод ?
Ваш вывод неверный. Вас пытались натолкнуть и даже явно написали что делать, но вы не поняли советов. Где вы юмор и петросянщину увидели? Вывод? Очередной хамила, думать не хочет, дай ему готовенькое...
30 сен 16, 13:46    [19728343]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
buven
Member

Откуда:
Сообщений: 792
Esentuki,
И кстати, судя по Прошу помочь построить SQL запрос, гвоздей у вас уже достаточно.
TaPaK, спрячьте уже молоток!:) Человек с июня месяца не слушает советов. Что будет дальше страшно представить...
Этот поезд нужно останавливать пока не поздно.
30 сен 16, 13:54    [19728427]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
TaPaK,

Я видел этот код не т вопросов, но я не могу сравнивать так a.Id = B1.Id, у меня не прямая связь
30 сен 16, 13:57    [19728463]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Esentuki
TaPaK,

Я видел этот код не т вопросов, но я не могу сравнивать так a.Id = B1.Id, у меня не прямая связь

дааа... ну что тут скажешь...
30 сен 16, 14:00    [19728481]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Esentuki
Member

Откуда:
Сообщений: 88
buven
Esentuki,
Вам нужно из

таблица B1
id | n2
------------
1 | 1
2 | 2
3 | 1, 2

Получить

таблица B1
id | n2
------------
1 | 1
2 | 2
3 | 1
3 | 2

И тогда сработает FAQ.
Можно поподробнее ??
30 сен 16, 14:00    [19728485]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
правильный проходящий.
Guest
Esentuki,

ну вот вы и подтвердили полную некомпетентность и такое полное незнание всего что сами пишите и что вам тут советуют.
Вам бы сначала теорию подтянуть вместо демонстрации владения русским матерным, вежливы вы наш. Написать 2(ДВА) запроса для вас равно написанию программы? Короче, в сад...
30 сен 16, 14:01    [19728494]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Модератор: Тов. Esentuki отправляется отдыхать от нервного занятия на недельку.
30 сен 16, 14:14    [19728630]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
коряво, но работает

create table table_1 (
id int primary key,
n1 varchar(100)
)
GO

create table table_2 (
id int primary key,
n2 varchar(100)
)
GO

CREATE FUNCTION [Split]
(
    @String NVARCHAR(4000),
    @Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
    WITH Split(stpos,endpos)
    AS(
        SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
        UNION ALL
        SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
            FROM Split
            WHERE endpos > 0
    )
    SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
        'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
    FROM Split
)
GO

insert into table_1 (id, n1)
values (1, 'test1'), (2, 'test2'), (3, 'test3')
GO

insert into table_2 (id, n2)
values (1, '1,2,3'), (2, '2'), (3, '1,2')
GO


;with cte (id, name) as (
select t2.id, t1.n1
from table_2 t2
  cross apply Split(t2.n2, ',') s
  inner join table_1 t1 on t1.id = cast(s.Data as int)
)

select distinct 
   tt1.id, 
   reverse(stuff(reverse((SELECT tt2.name + ', ' AS 'data()' from cte tt2 where tt2.id = tt1.id FOR XML PATH(''))), 1, 2, ''))  as str
from cte tt1
GO

truncate table table_1
GO

truncate table table_2
GO



| id |                   str |
|----|-----------------------|
| 1 | test1, test2, test3 |
| 2 | test2 |
| 3 | test1, test2 |
30 сен 16, 15:10    [19729127]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по SQL запросу  [new]
982183
Member

Откуда: VL
Сообщений: 3386
И всё же я не пойму - зачем не реляционную задачу решать реляционными методами?
Так привычней?
Тут же простая задача замены одной подстроки на другую.
1 окт 16, 10:17    [19731841]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить