none
Ayuda: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression RRS feed

  • Pregunta

  • Hola comunidad les quiero hacer una consulta por que no se donde tengo este error ya que no soy muy bueno utilizando SubQuerys...

    Lo que hace mi query es detectar que comprobantes se le aplico una nota de credito pero que (por un error en sistema que estamos tratando de ubicar) en otro modulo no figuran como cobrados los envios.

    El query es el siguiente:

    Select	e.EnvioID,
    	FechaComprobante,
    	TipoOperacion,
    	cta.NroComprobante,
    	cta.NroOperacion,
    	NroOperacionNotaCred,
    	(Select NroComprobante
    		From ClientesCtaCte cta
    			Inner Join ClientesCtaCteFANotas cre 
    				On cta.NroOperacion = cre.NroOperacionNotaCred
    		Where FechaComprobante Between '20161201' and GETDATE() 
    				AND TipoOperacion = 'CRE') as NroComprobanteNC,
    	ImporteTotal,
    	ImportePagado	
    From ClientesCtaCte cta
    	Inner Join Envios e
    		On e.EnvioID = cta.EnvioID
    	Inner Join ClientesCtaCteFANotas
    		On cta.NroOperacion = ClientesCtaCteFANotas.NroOperacionFactura 
    Where e.Cobrado = 'N' 
    	and e.ImporteCobrado = 0 
    	and FechaComprobante between '20161201' and GetDate() 
    	and ImportePagado = ImporteTotal

    Cuando corro esta query me tira el error descripto en el titulo del tread.

    Las Tablas son:

    Envios:

    EnvioID,

    Cobrado,

    ImporteCobrado

    ClientesCtaCte:

    NroOperacion,

    TipoOperacion,

    FechaComprobante,

    NroComprobante,

    ImporteTotal,

    ImportePagado

    ClientesCtaCteFANotas:

    NroOperacionFactura

    NroOperacionNotaCred

    Lo que necesito es que me enlace todos aquellos Envios que tienen un cobrado como "N" y ImporteCobrado en 0 y me figuren los nros de NotasDeCredito y de factura (TipoOperacion = 'FAC' y TipoOperacion = 'CRE') Los nros de Operacion que figuran en ClientesCtaCte se llenan en los casilleros de NroOperacionFactura o NroOperacionNotaCred si se le aplico a una factura una nota de credito (sino aparece un 0). No se donde le estoy errando espero que me puedan decir! Muchas Gracias. 

     

    lunes, 25 de septiembre de 2017 13:55

Respuestas

Todas las respuestas

  • El subquery que usas para la columna [NroComprobanteNC] retorna mas de una fila y una columna solo puede contener un valor y no un conjunto de filas.

    Deberas forzar traer slo un registro (usando TOP (1)) o concatenar los valores usando FOR XML PATH.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 25 de septiembre de 2017 14:09
  • Con top 1 solamente me muestra 1 solo comprobante de nota de crédito para todos los comprobantes yo necesito que me muestre la columna NroComprobanteNC que facturas fueron canceladas con las notas de crédito.

    Te hago un ejemplo:

    Envio   Fecha      TipoOperacion NroComprobante      NroOp    NroOpNC   NComNC

    1        01/2017           FAC                A-1                   001          10           A-25

    6        04/2017           FAC                A-20                 025          10           A-25

    9        04/2017           FAC                A-50                 045          25           A-32  

    Como se podría hacer con el FOR XML PATH???

    Tampoco no entiendo por que dice que retoma mas de una fila si en la subquery estoy diciendo que me muestre solamente la columna (NroComprobante) =S



    • Editado SomniaL lunes, 25 de septiembre de 2017 14:40
    lunes, 25 de septiembre de 2017 14:20
  • El problema es que no correlacionas el subquery con el el query principal.

    De alguna manera debes decirle al subquery que traiga solo los valores relacionados con la cuenta o envio que se procesa en el query original.

    Ejemplo:

    DECLARE @T1 table (id int PRIMARY KEY);
    DECLARE @T2 table (T1_id int, col1 int, PRIMARY KEY (T1_id, col1));
    
    INSERT INTO @T1 (id) VALUES (1), (2);
    INSERT INTO @T2 (T1_id, col1) VALUES (1, 11), (1, 12), (2, 15);
    
    SELECT
    	id,
    	STUFF(
    	(
    	SELECT 
    		',' + LTRIM(T2.col1)
    	FROM 
    		@T2 AS T2 
    	WHERE
    		T2.T1_id = [@T1].id 
    	ORDER BY
    		T2.col1
    	FOR XML PATH('')
    	), 1, 1, '') AS col2
    FROM @T1;
    GO

    Fijate en el subquery como se correlaciona con el query de afuera (T2.T1_id = [@T1].id).


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    lunes, 25 de septiembre de 2017 14:50