Permalänk
Medlem

SQL med alias

Hej,

Sitter med följande sql-kod:

SELECT B.BG_SUMMARY, B.BG_ACTUAL_FIX_TIME, ( select COUNT(*) from td.BUG B, td.AUDIT_LOG A, td.AUDIT_PROPERTIES P where B.BG_BUG_ID = A.AU_ENTITY_ID AND A.AU_ACTION_ID = P.AP_ACTION_ID AND A.AU_ENTITY_TYPE = 'BUG' AND P.AP_FIELD_NAME = 'BG_STATUS' --History type and field AND P.AP_OLD_VALUE = 'Closed' AND P.AP_NEW_VALUE = 'Open' --Transition rule ) AS Close_to_open_transition FROM td.BUG B WHERE B.BG_BUG_ID = 1

Det jag vill göra är att få fram när alias-kolumn Close_to_open_transition skiljer sig mot BG_ACTUAL_FIX_TIME genom att ange en WHERE-sats:

. . . WHERE B.BG_ACTUAL_FIX_TIME <> Close_to_open_transition

Detta ger dock felmeddelande:
Invalid column name 'Close_to_open_transition'.

Så, hur gör jag för att lösa detta? Eller har jag helt fel angreppsvinkel på problemet?

Tack på förhand!

Permalänk
Medlem

Testa

WHERE `B.BG_ACTUAL_FIX_TIME` <> `Close_to_open_transition`

.

Annars, i vilken tabell finns "Close_to_open_transition"? Tabell B? Testa då:

WHERE `B.BG_ACTUAL_FIX_TIME` <> `B.Close_to_open_transition`

Visa signatur

Programmerare -> PHP | HTML | CSS | JS | Java.

Permalänk
Medlem

Svaret låg i GROUP BY samt HAVING:

select COUNT(*) as Close_to_open_transition, B.BG_ACTUAL_FIX_TIME, B.BG_BUG_ID, B.BG_SUMMARY from td.BUG B, td.AUDIT_LOG A, td.AUDIT_PROPERTIES P where B.BG_BUG_ID = A.AU_ENTITY_ID AND A.AU_ACTION_ID = P.AP_ACTION_ID AND A.AU_ENTITY_TYPE = 'BUG' AND P.AP_FIELD_NAME = 'BG_STATUS' --History type and field AND P.AP_OLD_VALUE = 'Closed' AND P.AP_NEW_VALUE = 'Open' --Transition rule GROUP BY B.BG_ACTUAL_FIX_TIME, B.BG_BUG_ID, B.BG_SUMMARY HAVING COUNT(*) <> B.BG_ACTUAL_FIX_TIME

Är dock inte helt övertygad om att detta är snyggaste/lämpligaste lösningen. Alla fält som ska "selectas" måste anges som GROUP BY vilket jag är osäker på är helt ok att göra. Ni som har input på detta får gärna posta. Koden returnerar iaf det resultat som jag önskar så jag får väl känna mig nöjd.

Permalänk
Medlem

Blir detta samma tro?

SELECT T.TransCount, B.BG_ACTUAL_FIX_TIME, B.BG_BUG_ID, B.BG_SUMMARY FROM td.BUG AS B INNER JOIN ( SELECT A.AU_ENTITY_ID, COUNT(*) AS TransCount FROM td.AUDIT_LOG AS A INNER JOIN AUDIT_PROPERTIES AS P ON A.AU_ACTION_ID = P.AP_ACTION_ID WHERE A.AU_ENTITY_TYPE = 'BUG' AND P.AP_FIELD_NAME = 'BG_STATUS' -- History type and field AND P.AP_OLD_VALUE = 'Closed' AND P.AP_NEW_VALUE = 'Open' -- Transition rule GROUP BY A.AU_ENTITY_ID ) AS T ON T.AU_ENTITY_ID = B.BG_BUG_ID WHERE T.TransCount <> B.BG_ACTUAL_FIX_TIME

Visa signatur

as far as we can tell, the massacre went well...