2012-04-10 142 views
0

我有这个疑问:从重复值在SQL Server中,选择第一条记录

Select DFC_NOMBRE_CAMPO, DFC_TITULO, TDT_DATO_MOTOR, DFC_LONGITUD 
FROM MEM_DEFINICIONES_CAMPOS JOIN MEM_TIPOS_DATOS ON DFC_TDT_CODIGO = TDT_CODIGO 
WHERE DFC_ALMACENAR_BASEDATOS = 'S' 
ORDER BY DFC_NOMBRE_CAMPO ASC, DFC_LONGITUD DESC 

,结果,给我重复值:

DFC_NOMBRE_CAMPO         DFC_TITULO           TDT_DATO_MOTOR  DFC_LONGITUD 
-------------------------------------------------- -------------------------------------------------- -------------------- --------------------------------------- 
CodigoRespuesta         Cod. Respuesta          Varchar    3 
CodigoRespuesta         Cod. Resp.           Numeric    3 
CodigoRespuesta         Cod Respuesta          Numeric    3 
CodigoTransaccion         NULL            Numeric    2 
CodigoTransaccion         Codigo Transaccion         Numeric    2 
CodigoTransaccion         Codigo Transaccion         Numeric    2 
Estado            Estado            Numeric    2 
FechaHora           Fecha            Varchar    14 
FechaHora           Fecha            Varchar    14 
FechaHora           Fecha            Varchar    14 
NUT            NUT            Numeric    9 
NUT            NUT            Numeric    8 
NUT            NUT            Numeric    8           

我怎样才能获得只有从每个冷杉记录(DFC_NOMBRE_CAMPO)组。像这样:

DFC_NOMBRE_CAMPO         DFC_TITULO           TDT_DATO_MOTOR  DFC_LONGITUD 
-------------------------------------------------- -------------------------------------------------- -------------------- --------------------------------------- 
CodigoRespuesta         Cod. Respuesta          Varchar    3 
Estado            Estado            Numeric    2 
FechaHora           Fecha            Varchar    14 
NUT            NUT            Numeric    9 

回答

2

试试这个:

; 
WITH CTE AS 
    (
     SELECT DFC_NOMBRE_CAMPO, 
       DFC_TITULO, 
       TDT_DATO_MOTOR, 
       DFC_LONGITUD, 
       ROW_NUMBER() OVER(
        PARTITION BY DFC_NOMBRE_CAMPO ORDER BY DFC_NOMBRE_CAMPO ASC, 
        DFC_LONGITUD DESC 
       ) Rn 
     FROM MEM_DEFINICIONES_CAMPOS 
       JOIN MEM_TIPOS_DATOS 
        ON DFC_TDT_CODIGO = TDT_CODIGO 
     WHERE DFC_ALMACENAR_BASEDATOS = 'S' 
    ) 

SELECT * 
FROM CTE 
WHERE Rn = 1 
+0

WOW外观极好!仅仅只需要一个minnor修复 – Equiman 2012-04-10 22:17:23

+0

SELECT DFC_NOMBRE_CAMPO,DFC_TITULO,TDT_DATO_MOTOR,DFC_LONGITUD FROM ( \t SELECT DFC_NOMBRE_CAMPO,DFC_TITULO,TDT_DATO_MOTOR,DFC_LONGITUD, \t ROW_NUMBER()OVER(PARTITION BY DFC_NOMBRE_CAMPO ORDER BY DFC_NOMBRE_CAMPO ASC)R \t FROM MEM_DEFINICIONES_CAMPOS JOIN MEM_TIPOS_DATOS ON DFC_TDT_CODIGO = TDT_CODIGO \t WHERE DFC_ALMACENAR_BASEDATOS ='S' )AS CTE 其中Rn = 1 – Equiman 2012-04-10 22:17:54