具有连接的Oracle子查询

时间:2019-06-30 07:34:26

标签: oracle oracle12c

说明场景:

我有一个用于在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 个答案:

答案 0 :(得分:1)

您似乎需要这样的东西(由于缺少测试数据,因此未进行测试):

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)