выберите набор значений в качестве столбца без CREATE - PullRequest
0 голосов
/ 30 сентября 2010

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

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

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

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010
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
2 голосов
/ 30 сентября 2010

в одну сторону, используя встроенную таблицу 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, так что, возможно, причина для обновления: -)

...