选择一组值作为没有CREATE的列

时间:2010-09-30 14:26:00

标签: sql sql-server-2000

我正在尝试编写一个查询,它将返回所有QUERY_ID值以及所有匹配的TABLE_ID值,其中QUERY_ID未在任何表中指定,并且我无法创建表,因此必须在查询本身中指定它:

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

我觉得应该有一个简单的方法来做到这一点,但我不能想到它为我的生活。任何帮助都会很精彩。谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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函数,所以可能是升级的原因: - )