/ / Utilice el bucle while para leer el valor de las filas en el procedimiento almacenado - servidor sql, procedimientos almacenados, bucle while

Utilice el bucle while para leer el valor de las filas en el procedimiento almacenado: servidor SQL, procedimientos almacenados, bucle while

Estoy empezando a aprender acerca del bucle. Tengo códigos de muestra, pero lamentablemente puedo manipular el bucle while.

Necesito leer todo el valor en la columna Estado donde puedo ordenar esto en Primera A y hasta la Última B.

TABLE

ID  Time                    Status
12  2018-05-04 08:00:00     A
12  2018-05-04 09:00:00     A
12  2018-05-04 11:00:00     B
12  2018-05-04 13:00:00     A
12  2018-05-04 15:00:00     B
12  2018-05-04 18:00:00     B

La única forma de detectar todo valor es usar mientras que el bucle son mis códigos de muestra

DECLARE  @rc tinyint

SET @rc = @@ROWCOUNT


BEGIN

WHILE (@rc <= 1)

BEGIN

If (@in = "A")

BEGIN

WITH Param As (Select * FROM Table WHERE Status="A")

SELECT MAX(Status) FROM Param

END

END

END

Esta imagen muestra el valor que debe mostrar

OUTPUT

ID  Time                    Status
12  2018-05-04 08:00:00     A
12  2018-05-04 11:00:00     B
12  2018-05-04 13:00:00     A
12  2018-05-04 18:00:00     B

¿Me puede ayudar por favor? Es realmente difícil tener un bucle infinito

Respuestas

1 para la respuesta № 1

Tenga en cuenta que el uso de while loop no será una buena opción para este tipo de consultas. Será caro.

No necesitas un while bucle para lograr esto, se puede hacer de maneras más simples como usar un UNION y ROW_NUMBER() como siguiendo

SELECT Id,Status FROM
(
SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RN FROM [Table] WHERE Status="A"
UNION
SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) RN FROM [Table] WHERE Status="B"
)T ORDER BY RN

MANIFESTACIÓN

EDITAR:

Como ha mencionado, tiene una columna de fecha para ordenar los datos. Para este escenario puedes usar LAG en SQL Server

SELECT Id,Status FROM
(
SELECT *, LAG(Status) OVER(ORDER BY [Date]) NextStatus FROM [TableName]
) T
WHERE Status <> NextStatus OR NextStatus IS NULL

MANIFESTACIÓN

EDIT 2: SQL Server 2005

SELECT Id,Status FROM
(
SELECT *,
(
SELECT TOP 1 Status FROM [TableName] t2 WHERE t2.[Date] < t.Date ORDER BY DATE desc
) AS NextStatus
FROM [TableName] t
) T
WHERE t.Status <> NextStatus OR NextStatus IS NULL

MANIFESTACIÓN