代码之家  ›  专栏  ›  技术社区  ›  Stew

选择一组值作为列而不创建

  •  0
  • Stew  · 技术社区  · 14 年前

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

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

    我觉得应该有一个简单的方法来做这件事,但我一辈子都想不出来。任何帮助都会很好。谢谢!

    2 回复  |  直到 14 年前
        1
  •  4
  •   D'Arcy Rittich    14 年前
    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
  •  2
  •   SQLMenace    14 年前

    一种方法是使用内置的主..spt\u值表

    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
    

    你能创建#临时表吗…你能做到吗?

    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
    

    在SQLServer2005及更高版本上有行数函数,所以升级的原因可能是:-)