У меня есть таблица, которая содержит информацию для комнат, она содержит, среди прочих, столбец для BLDGCODE, а другой для COSTCODE. Каждой комнате в здании (BLDGCODE) может быть назначен только один кодер стоимости, и все они могут быть одного и того же значения или разных значений.SQL, чтобы найти несколько разных значений
Я пытаюсь написать сценарий, который показывает только здания с более чем одним отдельным кодом стоимости, назначенным его многочисленным комнатам, например, несколько комнат могут иметь код стоимости ABC и другие 999, который я хочу определить и сообщить. Я попытался с учетом того, что CTE даст мне результаты, однако я все еще вижу здания с одним кодом стоимости, который повторяется для нескольких комнат в здании.
with CTE
as (
select rtrim(fmb0.reg_code) as Region,
rtrim(Country) as Country,
rtrim(fmb0.BLDGCODE) as BLDGCODE,
(
case
when FMB0.BLDGSTATUS = 'CAD'
then 'Yes'
else 'No'
end
) as CAD,
group_ as GROUP_,
fma0.usable,
fmb0.nia,
fmb0.niahprev
from fmb0
left join fma0 on fmb0.bldgcode = fma0.bldgcode
left join fmey on fmb0.propsubtyp = fmey.ey_key
left join fme2 on fmb0.country = fme2.descrip
where fme2.is_live = 1
and fmey.bau = 1
and fmb0.bldgcode not like 'xx%'
and fma0.bldgcode like 'cn%'
)
select CTE.Region,
CTE.Country,
CTE.BLDGCODE,
CTE.GROUP_,
sum(cte.usable) as AREA,
cte.nia,
cte.niahprev,
CTE.CAD
from CTE
where CTE.CAD = 'No'
group by CTE.BLDGCODE,
cte.group_,
cte.country,
cte.region,
cte.nia,
cte.cad,
cte.niahprev
having count(CTE.GROUP_) > 1
order by 1, 2, 3
Как удалить те здания, что, несмотря на наличие нескольких появлений кода стоимости такие же, и показывает только те, которые имеют более одного код затрат, в течение которого различны?
Так вот код ссылки на одну таблицу:
with CTE as (
select
rtrim(fma0.BLDGCODE) as BLDGCODE,
group_ as GROUP_,
fma0.usable
from fma0
where
fma0.bldgcode like 'cn%'
)
select
CTE.BLDGCODE,
CTE.GROUP_ AS COSTCODE,
sum(cte.usable) as AREA
from CTE
group by CTE.BLDGCODE, cte.group_
having count(CTE.GROUP_) > 1
order by 1
Пример набора данных будет:
RMID BLDGCODE COSTCODE AREA
01.01 01 AA-01 10
01.02 01 AS-05 20
01.03 01 XY-99 30
01.04 01 XY-99 70
02.01 02 AA-01 10
02.02 02 AA-01 20
02.03 02 AA-01 20
Ожидаемые результаты будут:
BLDGCODE COSTCODE AREA
01 AA-01 10
01 AS-05 20
01 XY-99 100
BLDGCODE 02 не будет указывается, поскольку он имеет только один код стоимости
Спасибо
Ваше утверждение о «таблице», похоже, не имеет ничего общего с вашим запросом, который включает в себя множество таблиц. Примеры данных и желаемые результаты помогут уточнить. –
Попробуйте «МЕНЬШЕГО» (costcode) <> MAX (costcode) '(по крайней мере два разных кода стоимости), что более эффективно, чем' HAVING COUNT (DISTINCT costcode)> 1' – dnoeth
Спасибо dnoeth, но оба примера возвращают нулевые значения – FredTheDog