2015-01-15 2 views
0

Я пытаюсь сделать следующееSQL Как сделать несколько значений, используйте одну и ту же декларативную переменную?

  1. Link две таблицы с помощью объединения на одной и той же базе данных
  2. Возьмите столбец, который существует как FK_APPLICATIONID (с небольшой разницей, где один = +1 из другой Т.е. колонок 1 = 1375 и столбец 2 = 1376
  3. в одной из таблиц существуют ссылочный номер (QREF1234), а другой содержит 11 номеров телефонов
  4. Я хочу, чтобы иметь возможность ввести ссылочный номер, и она возвращается все 11 phonenbbers как единое декларируемое значение.
  5. использование Select * from TableD where phonenum in (@Declared variable)

Вот то, что я до сих пор,

Use Database 1 

DECLARE @Result INT; 

SELECT @Result = D.PhoneNum1,phonenum2,phonenum3,etc 

FROM Table1 

JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 

where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
and QREF = 'Q045569/2' 
Use Database2 

Select * from Table3 where PhoneNum = '@result' 

Названия вещей, как TABLE1 не является их истинным именем

Благодаря

+0

В чем вопрос? На что ты застрял? – alroc

+0

Что такое тип данных 'D.PhoneNum1', PhoneNum2, ..' и т. Д. –

+0

D.phonenum - это поле и номер телефона – Denslat

ответ

1

Я думаю, что вы после чего-то вроде этого. Вы пытаетесь «нормализовать» ненормированные столбцы и искать все эти значения в другой таблице. Вам нужно объединить результаты вместе в таблицу temp, а затем выполнить поиск значений.

Use Database 1 


Create Table #tmp(PhoneNums varchar(50)) 

INSERT INTO #tmp 
SELECT D.PhoneNum1 
FROM Table1 
JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
and QREF = 'Q045569/2' 
union 
SELECT D.PhoneNum2 
FROM Table1 
JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
and QREF = 'Q045569/2' 
union 
SELECT D.PhoneNum3 
FROM Table1 
JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
where TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
and QREF = 'Q045569/2' 

--Use Database2 
--you don't need to switch databases if you use a fully qualified name like shown below. 
Select * from Database2..Table3 where PhoneNum in 
(
    Select PhoneNums from #tmp 
) 
+0

Ты великолепный сын переполнения, он сработал! – Denslat

+0

большой. Рад, что смог помочь. – Jeremy

+0

это действительно сработало ... но я не могу запустить его более одного раза ... поскольку таблица #tmp уже существует ... – Denslat

0

Нет, вы не можете используйте переменную для хранения нескольких значений и используйте ключевое слово IN. Вы можете передать разделенный список значений в, проанализировать это, а затем использовать IN с коллекцией проанализированных значений.

В приведенном выше примере кода вы можете вместо этого создать переменную таблицы и выбрать ее.

+0

и как мне это сделать жаль? – Denslat

+0

@ Ответ Джереми - это то, что я собирался с комментарием 'table variable'. Вместо этого он просто использует временную таблицу. – ps2goat

0

Переменная может содержать только одно значение. Вместо того, чтобы с помощью оператора in, вы могли бы accompish это то же самое с присоединиться ...

Use Database1 

SELECT distinct 
    T3.* 
FROM 
    Table1 
    JOIN TABLE2 D on D.FK_ApplicationID= D.FK_ApplicationID 
    JOIN Database2.dbo.Table3 T3 on 
     T3.PhoneNum = D.PhoneNum1 
     or T3.PhoneNum = D.PhoneNum2 
     or T3.PhoneNum = D.PhoneNum3 
where 
    TABLE1.FK_ApplicationID = D.FK_ApplicationID + 1 
    and QREF = 'Q045569/2' 
0

Если вы не хотите набирать кучу ОШ на объединение можно использовать для работы присоединиться.

select * 
from Table3 t 
left join Table2 D on t.PhoneNum in 
    (
     d.phonenum1 
     , d.phonenum2 
     , d.phonenum3 
     , d.phonenum4 
     , d.phonenum5 
     , d.phonenum6 
     , d.phonenum7 
     , d.phonenum8 
     , d.phonenum9 
     , d.phonenum10 
     , d.phonenum11 
    ) 
    AND D.QREF = 'Q045569/2' 

Я бы рекомендовал вместо этого нормализовать ваши данные, а затем это не такой kludge.

Смежные вопросы