on 07-07-2016 11:22 PM
buenas tardes foro estoy realizando la siguiente consulta donde esto ocupando un WHILE que me regresa los renglones según las cantidades
WHILE @i <= (select B.Quantity/B.PackQty from ORDR A INNER JOIN RDR1 B on A.DocEntry = B.DocEntry where A.DocNum = 3828)
BEGIN;
IF (@i%1000!=0)
PRINT @i
SET @i=@i+1;
END;
todo jala bien solo cuando mi orden de compra es de una linea cuando es de dos me marca error como puedo resolver esta situación?
Subconsulta devuelve más de 1 valor. Esto no está permitido cuando la subconsulta sigue =! =, <, <=,>,> = O cuando se utiliza la subconsulta como una expresión.
encontré esto pero no entiendo muy bien
Printing multiple labels based on a quantity field | SCN
de crear la tabla etc.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
tengo algo asi
SELECT B.packQty,B.Quantity,B.Itemcode,B.Quantity/B.packQty
FROM RDR1 B
CROSS JOIN ORDR A
WHERE Itemcode='AA116243-5000' and A.DocNum = 3828 --Aqui en teoria deberias establecer tu campo llave unica
AND B.Quantity/B.packQty<= (CASE WHEN B.Quantity=1 THEN B.Quantity-1
ELSE(B.Quantity)
END)
y tengo esta también
/***************** cosnulta temporal*/
-- Crear tabla temporal con los valores actuales del campo EnEjecucion
-- eliminando si existe
IF OBJECT_ID( N'tempdb..#ProyectoEnejecucionEstado') IS NOT NULL
DROP TABLE #ProyectoEnejecucionEstado;
GO
-- creando la tabla temporal
CREATE TABLE #ProyectoEnejecucionEstado (
PoID INT,
DocNum CHAR(1000),
packQty CHAR(1000),
Itemcode VARCHAR(25)
);
GO
-- insertando los datos actuales de la tabla proyecto
INSERT INTO #ProyectoEnejecucionEstado(DocNum,packQty,Itemcode)
SELECT A.DocNum,B.packQty,B.Itemcode
FROM ORDR A INNER JOIN RDR1 B on A.DocEntry = B.DocEntry
WHERE
A.DocNum = 3828
GO
-- comprobando
SELECT * FROM #ProyectoEnejecucionEstado
GO
pero me regresa lo mismo
buenos días ya le realice unas correcciones y ya no me marca error pero no me devuelve datos solo me dice que se ejecuto con éxito?
DECLARE @ORDEN INT,
@i INT = 0
DECLARE CR_1 CURSOR
FOR select B.Quantity/B.PackQty from RDR1 B
OPEN CR_1
FETCH CR_1 INTO @ORDEN
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@i%1000!=0)
PRINT @i
FETCH CR_1 INTO @ORDEN
END
CLOSE CR_1
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Así es, ya que todo lo estas mandando a la Consola de SQL, deberías verlos en la pestaña de Messages de los resultados.
Otra cosa que podrías hacer seria que en la sentencia del PRINT @i poder remplazarla por un SELECT o insertarlo en una variable tipo tabla y al final del cursor realizar un select *, así ya lo mostraría en la pestaña de Resultados.
Saludos
es que estoy imprimiendo unas etiquetas y documentos de compra.
tengo mi orden de compra
con esta consulta
select A.CardName,A.DocNum,A.DocDate,A.DocDueDate,
B.ItemCode,B.Dscription,B.U_RI,B.U_RSG_OC,B.U_Ln,B.U_DL,B.Quantity,
B.UnitMsr,B.U_DD,B.U_VN,B.U_PL,B.U_BU,B.PackQty,B.U_SI,B.Project,B.U_DS,B.U_Sl,B.price,B.U_FC,
B.U_OR,B.U_Ventana,B.Quantity/B.PackQty
from ORDR A INNER JOIN RDR1 B on A.DocEntry = B.DocEntry
después la paso a mi CRYSTAL y hay quiero que me imprima el numero de documentos que me da el valor de B.Quantity/B.PackQty
ejemplo si el valor de B.Quantity/B.PackQty = 3 ,quiero que me imprima 3 documentos numerados
1
2
3
si el valor de B.Quantity/B.PackQty = 5 , requiero que me imprima 5 documentos numerados
1
2
3
4
5
tengo esto con WHILE
DECLARE @i INT = 0;
WHILE @i <= (select B.Quantity/B.PackQty from ORDR A INNER JOIN RDR1 B on A.DocEntry = B.DocEntry where A.DocNum = 3828)
BEGIN;
IF (@i%1000!=0)
PRINT @i
SET @i=@i+1;
END;
pero cuando la orden de compra solo es de una linea me sale bien, pero si la orden de compra es de dos o mas artículos me marca error por que devuelve más de 1 valor
Ok, por lo que veo primero haces una consulta para traer las Ordenes de Compra con su detalle (partidas) y luego en Crystal haces otra consulta para numerarlas de acuerdo a las partidas que tiene.
Si en la segunda consulta de Crystal seleccionas los datos que necesitas pintar, también puedes usar el comando de SQL ROW_NUMBER() que te numera las filas obtenidas en tu consulta de acuerdo a un criterio de Ordenamiento, por ejemplo:
select ROW_NUMBER() OVER(Order By DocNum) 'No', CardName, DocNum from ORDR
Obtendrá las Ordenes de Compra y las numerara. igual en vez de usar tu WHILE podrías hacer una sub consulta con ese comando, así te evitas iterar, porque supongo que tienes otra iteracion de tu primer consulta.
Saludos
Hola Antonio,
Has intentado realizar un CURSOR, para todas las ordenes de compras, seria algo como
DECLARE @ORDEN INT
DECLARE CR_1 CURSOR
FOR select B.Quantity/B.PackQty from ORDR A INNER JOIN RDR1 B on A.DocEntry = B.DocEntry
OPEN CR_1
FETCH NEXT CR_1 INTO @ORDEN
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@i%1000!=0)
PRINT @i
FETCH NEXT CR_1 INTO @ORDEN
END
DEALLOCATE CR_!
CLOSE CR_1
Espero que te sirva
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
107 | |
12 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.