Я пытаюсь заказать запрос по двум ключам.Запрос построен с несколькими подзапросами.Таблица содержит, кроме столбцов с другими данными, два столбца, Key и Key_Father.Поэтому мне нужно упорядочить результаты начиная с SQL, чтобы распечатать результаты в отчете.Это пример:
Key Key_Father
4 NULL
1 4
2 4
7 NULL
1 7
2 7
AsВы можете видеть структуру отца-сына, где строка является отцом, если Key_Father равен NULL, а столбец Key начинается с единицы для каждого сына с другим отцом.Первый подзапрос дает данные по порядку, потому что они хранятся в таблице в указанном порядке, а второй подзапрос, использующий группу, - нет.Поэтому я попытался добавить дополнительный столбец с Row_Number в первом подзапросе, чтобы сохранить этот порядок, но второй подзапрос делает то же самое.
Это запрос:
SELECT Orden,INV_Key,Key_Padre,INV.INV_ID,INV.BOD_Bodega_ID,
CASE WHEN MAX(HIS_Ventas) > 0 OR max(HIS_Disponible) > 0 THEN 1 ELSE 0 END AS Participacion,MAX(ISNULL(HIS_Ventas,0)) AS Ventas
FROM(SELECT ROW_NUMBER() OVER (ORDER BY C.INV_Compra_ID) Orden,C.BOD_Bodega_ID,INV_Key,Key_Padre,CD.INV_ID
FROM dbo.INV_COMPRAS_USADOS C
INNER JOIN dbo.INV_COMPRAS_USADOS_DET CD ON C.INV_Compra_ID = CD.INV_Compra_ID
WHERE C.INV_Compra_ID = @Compra_ID
AND ((Key_Padre IS NULL AND CD.INV_Catalogo_Codigo = ISNULL(@Cod_Catalogo,CD.INV_Catalogo_Codigo)
AND INV_Key IN (SELECT DISTINCT Key_Padre
FROM dbo.INV_COMPRAS_USADOS_DET
WHERE INV_Compra_ID = @Compra_ID AND Key_Padre IS NOT NULL))
OR Key_Padre IN (SELECT DISTINCT INV_Key
FROM dbo.INV_COMPRAS_USADOS_DET
WHERE INV_Compra_ID = @Compra_ID AND (Key_Padre IS NULL AND CD.INV_Catalogo_Codigo = ISNULL(@Cod_Catalogo,CD.INV_Catalogo_Codigo))))) INV
LEFT JOIN DBO.HIS_HISTORICO_DETALLE HD ON INV.INV_ID = HD.INV_ID AND HD.BOD_Bodega_ID = INV.BOD_Bodega_ID
LEFT JOIN DBO.HIS_HISTORICO_INVENTARIO H on H.HIS_Historico_ID= HD.HIS_Historico_ID AND (CONVERT(datetime,(convert(varchar(20),HIS_Historico_Ano) + '/' + convert(varchar(20),HIS_Historico_Mes) + '/01')) BETWEEN @FechaDesde AND @FechaHasta)
WHERE H.HIS_Historico_Mes IS NOT NULL OR INV.INV_ID IS NULL
GROUP BY Orden,INV_Key,Key_Padre,INV.INV_ID,INV.BOD_Bodega_ID,HIS_Historico_Ano,HIS_Historico_Mes
Еще одна интересная вещь(хорошо для меня): когда я изменяю значения @Variables для констант, второй запрос сохраняет правильный порядок, даже если значения констант совпадают с значениями @variables.Это всего лишь часть общего запроса, это подзапрос, который требует еще двух выборок, и мне нужно также сохранить порядок этих выборок.
Поэтому я надеюсь, что кто-то может помочь мне с этим.Спасибо!