Ich habe eine Tabelle, die Informationen für Räume enthält, es enthält unter anderem eine Spalte für BLDGCODE und eine andere für COSTCODE. Jedem Raum im Gebäude (BLDGCODE) kann nur ein einziger Kostencode zugeordnet werden, und alle können denselben Wert oder unterschiedliche Werte haben.SQL, um verschiedene Werte zu finden
Ich versuche, ein Skript zu schreiben, das nur Gebäude mit mehr als einem eindeutigen Kostencode für seine vielen Räume anzeigt, zum Beispiel könnten mehrere Räume den Kostencode ABC und andere 999 haben, was ich identifizieren und berichten möchte. Ich habe versucht mit dem untenstehenden Gedanken ein CTE würde mir die Ergebnisse bringen, aber ich sehe immer noch Gebäude mit nur dem einen Kostencode, die für mehrere Räume im Gebäude wiederholt werden.
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
Wie entferne ich jene Gebäude, die mehrere Vorkommen der Kostencode ist gleich, und nur zeigen diejenigen, obwohl sie die mehr als ein Kostencode haben, innerhalb derer unterschiedlich sind?
So, hier ist der Code eine einzelne Tabelle verweisen:
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
Beispiel Datensatz wäre:
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
Erwartete Ergebnisse wäre:
BLDGCODE COSTCODE AREA
01 AA-01 10
01 AS-05 20
01 XY-99 100
BLDGCODE 02 würde nicht angezeigt werden, da es nur einen einzigen Kostencode
hat 0Danke
Ihre Aussage über "eine Tabelle" scheint nichts mit Ihrer Abfrage zu tun, die viele Tabellen umfasst. Beispieldaten und gewünschte Ergebnisse würden zur Klärung beitragen. –
Versuchen Sie 'HAVING MIN (Kostencode) <> MAX (Kostencode)' (mindestens zwei verschiedene Kostencodes), die effizienter ist als 'HAVING COUNT (DISTINCT-Kostencode)> 1' – dnoeth
Danke dnoeth, aber beide Beispiele geben Nullwerte – FredTheDog