说明场景:
我有一个用于在oracle数据库上构建单元的真实状态系统。在我的系统中的哪个位置,有建筑物的分组列表,建筑物的列表,每个建筑物都有其单位。
每栋建筑物上都有多个单位,价格根据其位置和房间,厨房,浴室,阳台和停车场的数量而异...等
例如:
某些单位已出租,有些单位未出租
我希望根据其规格和价格列表获取单位列表。
我已经对查询进行了编码,以给我这样的列表:
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
输出如下:
如果您查看记录3和4,它们具有相同的规格和相同的价格,其中唯一不同的是UNIT_STATE和COUNT(U.UNIT_STATE) (y)已租用(1个单位)或(N)未租用(2个单位)
我正在寻找的是通过像这样的单独列上的COUNT(U.UNIT_STATE)获得单位计数
我在哪里:
例如,记录数为3的总单位为3,其中1个单位已租用而2个单位未租用。
答案 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)