Resultado distinto por toda la tabla al utilizar CROSS APPLY en JSON y ORDER BY con CASE.
Necesito ordenar mi resultado por valor de un diccionario almacenado como JSON en mi tabla que es igual a un parámetro.
Para obtenerlo, estoy utilizando un caso en mi ordenamiento para verificar si el valor del diccionario coincide con el parámetro.
Después de ordenar la tabla, necesito eliminar los resultados duplicados, sin embargo, estoy obteniendo un error y no he podido resolverlo.
Aquí está mi consulta:
declare @FilteredItemIDs -> tabla temporal que filtra mis elementos
declare @CurrentGroupID como int
seleccionar distinct item.*
de Items as items
outer apply openjson(json_query(Data, '$.itemOrderPerGroup'), '$') as X
donde items.ItemID en (select ItemID de @FilteredItemIDs )
order by caso
cuando @CurrentGroupID!= 0 y (JSON_VALUE(X.[Value], '$.Key') = @CurrentGroupID) entonces 1
sino 2 final,
CONVERTIR(int, JSON_VALUE(X.[Value], '$.Value'))
davy.ai
El problema con la consulta es que después de aplicar la cláusula order by, nos quedan duplicados en nuestro conjunto de resultados. Para eliminar los duplicados, estamos utilizando la palabra clave distinct.
Sin embargo, la palabra clave distinct no se puede aplicar a un conjunto de resultados que incluye tipos de datos LOB (Large Object) como JSON. Por lo tanto, necesitamos convertir los datos de JSON en un formato de cadena antes de aplicar la palabra clave distinct.
Aquí hay una versión actualizada de la consulta que debería funcionar:
Tenga en cuenta que ahora estamos convirtiendo toda la fila de elementos en una cadena utilizando la función CONVERT, y también estamos aplicando la función CONVERT al valor de JSON que se ordena. Esto debería permitir que se aplique la palabra clave distinct sin problemas.