我正在尝试编写一个查询,它将返回所有QUERY_ID值以及所有匹配的TABLE_ID值,其中QUERY_ID未在任何表中指定,并且我无法创建表,因此必须在查询本身中指定它:
QUERY_ID TABLE_ID
1 1
2 NULL
3 3
4 4
5 NULL
我觉得应该有一个简单的方法来做到这一点,但我不能想到它为我的生活。任何帮助都会很精彩。谢谢!
答案 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函数,所以可能是升级的原因: - )