2012-09-27 19 views
9

tengo los datos siguientes en una tabla de SQLSELECT TOP N con la variable

de temperatura variable de tabla @RndQuesnCount contiene estos datos,

Recid conceptID MinDisplayCount 
1  3839  2 
2  4802  3 

tabla de preguntas: QuesTable

QuesCompID  Ques_ConceptDtlID 
    88   4802 
    89   4802 
    90   4802 
    91   4802 
    92   4802 
    93   4802 

lo que yo desea mostrar es el recuento de visualización mínima para la pregunta que está en @RndQuesnCount para la ID del concepto, por lo que ahora los datos deben venir como se indica a continuación

QuesCompID Ques_ConceptDtlID 
    88   4802 
    89   4802 
    90   4802 

porque conceptid (4802) tiene min recuento de display 3 en @RndQuesnCount tabla.

¿Alguien me puede ayudar a resolver este problema?

Respuesta

8

uso simple de ROW_NUMBER() y unirse obtiene los resultados, creo. configuración de datos:

declare @RndQuesnCount table (recid int,conceptid int,mindisplaycount int) 
insert into @RndQuesnCount(Recid,conceptID,MinDisplayCount) values 
(1,  3839,  2), 
(2,  4802,  3) 

declare @QuesTable table (QuesCompID int,Ques_ConceptDtlID int) 
insert into @QuesTable(QuesCompID,Ques_ConceptDtlID) values 
(88,   4802), 
(89,   4802), 
(90,   4802), 
(91,   4802), 
(92,   4802), 
(93,   4802) 

consulta:

select 
    t.rn, 
    t.QuesCompID, 
    t.Ques_ConceptDtlID 
from 
    @RndQuesnCount rqc 
     inner join 
    (select *,ROW_NUMBER() OVER (PARTITION BY Ques_ConceptDtlID ORDER BY QuesCompID) rn from @QuesTable) t 
     on 
      rqc.conceptID = t.Ques_ConceptDtlID and 
      rqc.MinDisplayCount >= t.rn 

Resultados:

rn     QuesCompID Ques_ConceptDtlID 
-------------------- ----------- ----------------- 
1     88   4802 
2     89   4802 
3     90   4802 
2

intento:

declare @RndQuesnCount int; 

select @RndQuesnCount=MinDisplayCount 
from table_variable where conceptID=4802; 

set rowcount @RndQuesnCount; 

select * from QuesTable; 
+0

ningún valor codificado, que necesito para obtener los valores del nombre de la columna –

+0

tengo editar mi respuesta para obtener el valor @RndQuesnCount dinámicamente desde table_variable. – Habibillah

2

Prueba esto:

;WITH cte as 
    ( select *,row_number() over(order by QuesCompID) as row_num 
     from QuesTable 
     join @RndQuesnCount 
     on  Ques_ConceptDtlID=conceptID) 
SELECT QuesCompID,Ques_ConceptDtlID 
FROM cte 
WHERE row_num<=MinDisplayCount 

Resultado:

QuesCompID Ques_ConceptDtlID 
88    4802 
89    4802 
90    4802 
Cuestiones relacionadas