SQL Server - Obtener un valor entre varios resultados

 
Vista:
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Hu (13 intervenciones) el 10/08/2018 16:06:41
Saludos,

Tengo el siguiente select donde traigo todos los artículos vendidos, con su número de cuenta (Check) de manera correcta.

Lo que necesito ahora es hacer una relación con su su número de cuenta (Check) a otra tabla para ver con que forma de pago se pago esa cuenta, esa sería la tabla GNDTNDR y el campo TYPE = '1' y luego obtenga el código de la forma de pago en el campo TYPEID, luego que tengo el código de la forma de pago voy a TDR para ver el nombre de la forma de pago.

El problema es que en una cuenta (Check) puede haber mas de una forma de pago (ejemplo: Cash y Visa), y cuando hice la relación a GNDTNDR, en las cuentas que habían mas de una forma de pago me duplicaba los artículos por cada forma de pago, lo que me daña el select porque al final quiero obtener cada artículo vendido.

Como puedo hacer para cuando voy a buscar la forma de pago a esa tabla, si hay mas de dos forma de pago, me traiga un solo modo de pago, al final no quiero el monto, sino el codigo del pago para relacionarlo a otra tabla y buscar el nombre del pago sin que me duplique los items vendidos.

PD: Lo que esta comentado (--) es lo que trataba de hacer pero me lo arrojaba duplicados por cada forma de pago.

Ver Imágenes.

Gracias por su ayuda.

---------------------------------------

select company = 'test',
airport = 'test',
g.unit as location,
g.dob as posting_date,
g.dob as Posting_time,
g.[check] as ticket_no,
g.employee as salesperson,
customer_name = null,
nationality = null,
passport = null,
flight_no = null,
destination = null,
g.item as item_no,
i.LONGNAME as item_description,
CATEGORY as item_category,
sales_qty = '1',
g.PRICE as amount_before_discount,
g.DISCPRIC as discount_amount,
g.PRICE as amount,
itbis = null,
impuestoley = null
--t.name as paymentmethod
from gnditem g
inner join itm i on g.item = i.id
--inner join GNDTNDR gt on g.[check] = gt.[CHECK]
--inner join TDR t on gt.TYPEID = t.ID
where g.dob = '20180807' --and gt.[TYPE] = '1'
order by g.[CHECK] asc
1
2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Isaias (4558 intervenciones) el 10/08/2018 17:27:07
Creo que si TODO el query lo une, siempre le generara DUPLICADOS por la forma en que tiene sus relaciones, a mi modo de ver las cosas, primero debería obtener las CUENTAS y una vez obtenidas estas, obtener la FORMA DE PAGO por cada una de ellas, ¿donde mostrara el resultado? (pantalla, reporte, etc.)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Hu (13 intervenciones) el 10/08/2018 19:07:06
Saludos Isaias,

Gracias por su respuesta.

Ese select luego lo llevare a una vista para exportarlo por coma (,).

Que me recomiendas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Isaias (4558 intervenciones) el 10/08/2018 20:54:14
Es que en el estricto sentido del query, no son DUPLICADOS

¿Algo como esto?

dato1, dato2, dato3, formapago1, formapago2, formapago3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Hu (13 intervenciones) el 10/08/2018 23:11:26
No exactamente Isaias,

Solo quiero traer una sola forma de pago de otra tabla, a pesar que un mismo ticket tenga dos forma de pago.

Te adjunto una foto con la tabla que hago la referencia. Fíjate el resultado que arroja este select; el ticket (150056) tienes dos forma de pago (Type = '1'). Necesito traer solo uno de esos dos resultados al query anterior. El problema es que aunque en el ticket solo haya un artículo, si hay dos formas de pago, me repite el artículo dos veces, por ambas forma de pago.

Query:

select * from GNDTNDR where date = '20180807' and [check] = '150056' and type = '1'



3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Isaias (4558 intervenciones) el 10/08/2018 23:33:32
Entendido, entonces crea una FUNCION de usuario, donde le pases el TICKET como parámetro y de regreso, solo te traiga UN SOLO registro.

Listo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Hu (13 intervenciones) el 13/08/2018 17:33:23
Saludos Isaias,

Perfecto, ya vi como hacer Funciones de usuario.

Ahora, antes de hacer la función de usuario, necesito determinar como traer un solo resultado de los dos tipos de pagos que me arroja.

Literalmente, los dos resultados que arroja (porque la cuenta tiene dos tipos de pagos) son validos ambos resultados, el tema es que solo quiero traer uno de los dos. He estado pensando hacer la Funcion que me traiga todo (*) pero solo el que tenga el valor mayor.

Como puedo hacer eso? Se que es con MAX(amount) pero no se como conformar el select.

Gracias por tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Isaias (4558 intervenciones) el 13/08/2018 18:34:31
Nop, con un simple TOP 1

SELECT TOP 1.................BLA, BLA, BLA

Claro, esto en el cuerpo de la FUNCIÓN DE USUARIO, esta, solo regresaría un solo registro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha aumentado 1 puesto en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Hu (13 intervenciones) el 13/08/2018 19:41:01
Isaias,

Muchas gracias por tu ayuda, hasta ahora lo he hecho como me indicas y voy bien.

El tema que tengo ahora es que la función me arroja el ID del tipo de pago, pero necesito el nombre que esta en otra tabla relacionado por el ID.

Como puedo traer el nombre relacionándolo con el ID que me arroja la función ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Obtener un valor entre varios resultados

Publicado por Isaias (4558 intervenciones) el 14/08/2018 22:05:19
Simple, en la función de usuario, relaciona tu tipo de pago con esa otra tabla. Recuerda que a la función puedes pasar tantos parámetros como necesites
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar