2010-09-30 2 views
0

Я пытаюсь написать запрос, который будет возвращать все значения QUERY_ID вместе со всеми соответствующими значениями TABLE_ID, где QUERY_ID не указан ни в одной таблице, и я не могу создавать таблицы, поэтому нужно указать его в самом запросе:выберите набор значений в качестве столбца без CREATE

QUERY_ID TABLE_ID 
1   1 
2   NULL 
3   3 
4   4 
5   NULL 

Я чувствую, что там должен быть простой способ сделать это, но я не могу думать об этом для жизни меня. Любая помощь будет замечательной. Благодаря!

ответ

4
select q.QUERY_ID, t.TABLE_ID 
from (
    select 1 as QUERY_ID 
    union all 
    select 2 
    union all 
    select 3 
    union all 
    select 4 
    union all 
    select 5 
) q 
left outer join MyTable t on q.QUERY_ID = t.TABLE_ID 
+0

ах, да - у меня был зуд о UNION ALL, но я не собирался вместе ... спасибо! – Stew

2

один способ с помощью встроенного в таблице master..spt_values ​​

SELECT number AS QUERY_ID,TABLE_ID 
FROM master..spt_values v 
LEFT JOIN YourTable y ON y.QUERY_ID = y.TABLE_ID 
WHERE TYPE = 'p' 
AND number > 0 
AND number <= (SELECT COUNT(*) FROM YourTable) 
order by QUERY_ID 

вы способны создавать таблицы #temp ... Вы можете сделать это?

create table #temp(QUERY_ID int identity,TABLE_ID varchar(200)) 

insert #temp(TABLE_ID) 
select TABLE_ID 
from YourTable 

select * from #temp 
order by QUERY_ID 

drop table #temp 

или как этот

select identity(int,1,1) as QUERY_ID,TABLE_ID 
into #temp 
from YourTable 

select * from #temp 
order by QUERY_ID 

На SQL Server 2005 и выше есть функция row_number поэтому, может быть, причина для обновления :-)

+0

да, но я считаю, что имеет только 1024 строки не 2048, как в 2005 году и до – SQLMenace

+0

Да. Просто googled, что и + 1ed! –

+0

Возможно, вы добавили сервисный пакет 3 или около того, но больше не помните – SQLMenace

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