2010-09-30 5 views
0

J'essaye d'écrire une requête qui retournera toutes les valeurs QUERY_ID avec toutes les valeurs TABLE_ID correspondantes, où QUERY_ID n'est spécifié dans aucune table, et je ne peux pas créer de tables, doivent donc préciser dans la requête elle-même:sélectionnez un ensemble de valeurs en tant que colonne sans CREATE

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

Je me sens comme il devrait être un moyen simple de faire cela, mais je ne peux pas penser à la vie de moi. Toute aide serait merveilleuse. Merci!

Répondre

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

ah, oui - j'avais une démangeaison au sujet UNION TOUS mais je ne le mettais pas ensemble ... merci! – Stew

2

une façon en utilisant le construit dans la table 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 

vous sont en mesure de créer des tables de #temp ... pouvez-vous faire?

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 

ou comme celui-ci

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

select * from #temp 
order by QUERY_ID 

Sur le serveur SQL 2005 et là est la fonction row_number alors peut-être une raison de mise à jour :-)

+0

oui il existe mais je crois seulement a 1024 lignes pas 2048 comme en 2005 et en hausse – SQLMenace

+0

Oui. Juste googlé cela et + 1ed! –

+0

Peut-être ajouté avec le Service Pack 3 mais je ne me souviens plus – SQLMenace