Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сложный запрос / 12 сообщений из 12, страница 1 из 1
19.09.2002, 06:50:01
    #32051499
Dvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Господа, существует две таблицы #T1 и #T2.
Нужно написать один такой запрос, который бы возвращал результаты, приведенные ниже, для трех вариантов заполнения таблицы #T2, т.е. выбрать из таблиц все значения строк, в которых #T1.kod=#T2.kod , T1.value = 'aga', для #T2.value выдать либо a1, если a1 существует в таблице, либо null во всех других случаях:

1)
1 aga 1 a1
5 aga 5 a1

2)
1 aga null null
5 aga null null

3)
1 aga null null
5 aga null null



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
create table #t1 (kod int,value char( 3 ))
insert #t1 values( 1 ,'aga')
insert #t1 values( 2 ,'b')
insert #t1 values( 3 ,'c')
insert #t1 values( 4 ,'d')
insert #t1 values( 5 ,'aga')  

 1 )
create table #t2 (kod2 int,value2 char( 3 ))
insert #t2 values( 1 ,'a1')
insert #t2 values( 2 ,'a2')
insert #t2 values( 3 ,'a3')
insert #t2 values( 1 ,'a2')
insert #t2 values( 5 ,'a1')
insert #t2 values( 5 ,'a2')

 2 )
create table #t2 (kod2 int,value2 char( 3 ))
insert #t2 values( 2 ,'a2')
insert #t2 values( 3 ,'a3')

 3 )
create table #t2 (kod2 int,value2 char( 3 ))
insert #t2 values( 1 ,'a8')
insert #t2 values( 2 ,'a2')
insert #t2 values( 3 ,'a3')
insert #t2 values( 1 ,'a6')
...
Рейтинг: 0 / 0
19.09.2002, 07:04:13
    #32051501
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
либо a1, если a1 существует в таблице, либо null во всех других случаях

То есть, если в таблице 2 будут следующие значения:
1, 'a2'
2, 'a3'
5, 'a4'

то выдать надо
1 aga null null
5 aga null null
?

-- Слон
...
Рейтинг: 0 / 0
19.09.2002, 07:05:35
    #32051502
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
А соответственно, если будут

1, 'a2'
2, 'a1'
5, 'a4'

То выдать

1 aga 1 a1
5 aga 5 a1

?

-- Слон
...
Рейтинг: 0 / 0
19.09.2002, 07:42:08
    #32051504
Slava
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
  t1.kod, f1 = t1.value, t1.kod,
	value2 = case when exists
		(
			select t2.kod 
				from @tmp1 t1 
				inner join @tmp2 t2 
				on t1.kod = t2.kod and t1.value = 'aga' and t2.value2 = 'a1'
		) then 'a1' else null end
  from @tmp1 t1
  inner join @tmp2 t2
  on t1.kod = t2.kod and t1.value = 'aga'
...
Рейтинг: 0 / 0
19.09.2002, 10:44:33
    #32051553
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Slava,

А зачем такие навороты? :)

-- Слон
...
Рейтинг: 0 / 0
19.09.2002, 11:44:11
    #32051601
Dvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
2 Слон:
прошу прощения, если значение в строке равно 'а1'
т.е если будет
1,'а2'
2,'а2'
5,'а2'
выдать
1 aga null null
5 aga null null
...
Рейтинг: 0 / 0
19.09.2002, 11:54:09
    #32051610
Dvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
2 Slava:
Простите великодушно, но не получается выполнить ваш запрос.
Что означают
Код: plaintext
1.
from @tmp1 t1 
inner join @tmp2 t2 

имена переменных @tmp1, @tmp2?
...
Рейтинг: 0 / 0
19.09.2002, 12:11:36
    #32051617
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
думаю имелось ввиде переменная типа table....
...
Рейтинг: 0 / 0
19.09.2002, 18:08:02
    #32051761
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Тогда ларчик просто открывается
Код: plaintext
1.
2.
3.
4.
SELECT * 
FROM #t1 t1
     LEFT OUTER JOIN #t2 t2
          ON t1.kod = t2.kod2 AND t2.value2 = 'a1'
WHERE t1.kod IN ( 1 ,  5 )


-- Слон
...
Рейтинг: 0 / 0
19.09.2002, 18:09:34
    #32051765
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Ну и там в условие JOIN можно повидоизменять для тогго, чтобы t1.value было 'aga'.

-- Слон
...
Рейтинг: 0 / 0
20.09.2002, 02:45:39
    #32051805
Dvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
Спасибо всем.
...
Рейтинг: 0 / 0
20.09.2002, 03:36:40
    #32051809
Dvorez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложный запрос
А решается эта задача вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select distinct t1.f1 , t1.f2, t2.f1 f3, t2.f2 f4 into #t 
from 
t1 inner join t2 on (t1.f1 = t2.f1 and t2.f2 = 'a1')
insert into #t select distinct t1.f1 , t1.f2, t2.f1, null 
from
t1 inner join t2 on (t1.f1 = t2.f1 and t2.f2 is null and t1.f1 not in (select f1 from #t))
insert into #t select distinct t1.f1 , t1.f2, t2.f1, null 
from
t1 inner join t2 on (t1.f1 = t2.f1
 and t1.f1 = (select top  1  t2.f1 from t2 where t2.f1 = t1.f1) 
 and t1.f1 not in (select f1 from #t))

select * from #t
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сложный запрос / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]