Подзапросы Oracle с объединением - PullRequest
1 голос
/ 30 июня 2019

Объяснение сценария:

У меня есть настоящая государственная система аренды объектов, построенная на базе данных Oracle. Где в моей системе у меня есть список групп зданий, список зданий, и у каждого здания есть свои единицы.

в каждом здании есть несколько единиц, цены на которые различаются в зависимости от местоположения и количества комнат, кухни, ванной комнаты, балкона и парковки ... и т. Д.

например:

  • квартиры с видом на улицу с 3 спальнями ($ 15K / год)
  • вид сзади с 3 спальнями ($ 13K / год)
  • угловые квартиры с видом на улицу и сбоку с 4 спальнями ($ 18K / год)
  • угловые квартиры с видом на улицу и сбоку с 4 спальнями ($ 18K / год)
  • и так далее ...

некоторые юниты сдаются в аренду, а некоторые юниты не сдаются в аренду

Я хочу получить список единиц на основе его спецификаций и прайс-листа.

Я закодировал запрос, чтобы получить список вроде этого:

SELECT GR.G_NO, MIN(U.ANNUAL_RENT),MIN(U.U_NO), MIN(U.U_CODE), MIN(UT.UNIT_TYPE),  U.VARAND_NAME, U.UNIT_STATE, COUNT(U.UNIT_STATE) , COUNT(UT.UNIT_TYPE), min(U.COUNT_ROOM), min(U.PATH_NO), min(U.GALARY_NO), 
FROM UNITS U 
JOIN UNIT_TYPE UT
ON UT.UNIT_NO = U.UNIT_NO
JOIN GROUPS GR
ON GR.G_NO = U.G_NO
JOIN BUILDS B
ON B.B_NO = U.B_NO
WHERE 
GR.G_NO = B.G_NO
GROUP BY GR.G_NO, B.B_NAME, U.VARAND_NAME, U.UNIT_STATE, U.ANNUAL_RENT
ORDER BY GR.G_NO, B.B_NAME, MIN(U.ANNUAL_RENT),MIN(U.U_NO)
FETCH FIRST 5 ROWS ONLY

Где вывод выглядит так:

enter image description here

если вы посмотрите на записи 3 и 4, они имеют одинаковую спецификацию и одинаковые цены, где различаются только UNIT_STATE и COUNT (U.UNIT_STATE) (y) арендованный (1 единица) или (N) не арендованный (2 единицы)

мне нужно получить счетчик COUNT (U.UNIT_STATE) для отдельных столбцов, подобных этому

enter image description here

где я получаю:

  • Общее количество единиц по типу и характеристикам
  • Общее количество Арендованных единиц такого же типа и спецификаций,
  • Общее количество Не сданных в аренду единиц такого же типа и спецификаций,

так, например, для записи № 3 общее количество единиц равно 3, где 1 единица арендуется, а 2 единицы не сдана в аренду.

1 Ответ

1 голос
/ 30 июня 2019

Кажется, что вам нужно что-то вроде этого (не проверено из-за отсутствия данных теста):

SELECT GR.G_NO, 
       MIN(U.ANNUAL_RENT) ,
       MIN(U.U_NO), 
       MIN(U.U_CODE), 
       MIN(UT.UNIT_TYPE),  
       U.VARAND_NAME, 
       COUNT(U.UNIT_STATE) as total_unit_by_same_type,
       COUNT( CASE WHEN UNIT_STATE = 'Y' THEN 1 END ) as "COUNT(U.UNIT_STATE)=Y",
       COUNT( CASE WHEN UNIT_STATE = 'N' THEN 1 END ) as "COUNT(U.UNIT_STATE)=N",
       COUNT(UT.UNIT_TYPE), 
       min(U.COUNT_ROOM), 
       min(U.PATH_NO), 
       min(U.GALARY_NO),
       U.ANNUAL_RENT
FROM .... 
...... rest of your query goes here
.....
.....
GROUP BY GR.G_NO, 
      B.B_NAME, 
      U.VARAND_NAME,
      U.ANNUAL_RENT
ORDER BY GR.G_NO, B.B_NAME, MIN(U.ANNUAL_RENT),MIN(U.U_NO)
...