2016-03-31 3 views
1

мне нужно получить доступ к полю таблицы базы данных, которая определяется условием в query.I необходимо получить доступ к столбцам и фильтрам данных SERVICE_LEG из этого столбца.нужно получить доступ к полю таблицы, которая определяется условием

SELECT 
pa1.countryname, 
pw.serviceprovideractorwid, 
pa2.id, 
pw.orderid, 
pw.issorderref, 
po.modelcode, 
pw.itemid, 
pe1.eventcode AS STARTEVENTCODE, 
pe2.eventcode AS ENDEVENTCODE, 
    CASE 
    WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE' 
    ELSE 'FROM SERVICE' 
    END AS "SERVICE_LEG", 
pa1.roleid, 
pad.activitycode, 
pw.tat, 
pw.totelapse 
FROM phwactivitydetail pw 
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid 
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid 
JOIN phdobject po ON po.objectwid = pw.objectwid 
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid 
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid 
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid 
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid 
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum; 

спасибо.

ответ

0

Используйте outer sub-query для достижения этой цели.

Демо:

SELECT * 
FROM 
(
    SELECT 
    pa1.countryname, 
    pw.serviceprovideractorwid, 
    pa2.id, 
    pw.orderid, 
    pw.issorderref, 
    po.modelcode, 
    pw.itemid, 
    pe1.eventcode AS STARTEVENTCODE, 
    pe2.eventcode AS ENDEVENTCODE, 
     CASE 
     WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE' 
     ELSE 'FROM SERVICE' 
     END AS "SERVICE_LEG", 
    pa1.roleid, 
    pad.activitycode, 
    pw.tat, 
    pw.totelapse 
    FROM phwactivitydetail pw 
    JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid 
    JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid 
    JOIN phdobject po ON po.objectwid = pw.objectwid 
    JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid 
    JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid 
    JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid 
    JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid 
    JOIN gldcalendar gc ON gc.datenum = pw.enddatenum 
) t 
WHERE t.SERVICE_LEG > 100; 
+0

Большое спасибо ......: D – Toshan

0

имя столбца TO_SERVICE и FROM SERVICE должен быть заключен в обратные кавычки «`», а не«'», как это сделает его переменной.

SELECT 
pa1.countryname, 
pw.serviceprovideractorwid, 
pa2.id, 
pw.orderid, 
pw.issorderref, 
po.modelcode, 
pw.itemid, 
pe1.eventcode AS STARTEVENTCODE, 
pe2.eventcode AS ENDEVENTCODE, 
    CASE 
    WHEN pw.enddate < pof.retdate THEN `TO_SERVICE` 
    ELSE `FROM SERVICE` 
    END AS "SERVICE_LEG", 
pa1.roleid, 
pad.activitycode, 
pw.tat, 
pw.totelapse 
FROM phwactivitydetail pw 
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid 
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid 
JOIN phdobject po ON po.objectwid = pw.objectwid 
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid 
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid 
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid 
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid 
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum; 

Далее вы можете добавить условие, согласно ценам ниже

SELECT * FROM 
(
    SELECT 
    pa1.countryname, 
    pw.serviceprovideractorwid, 
    pa2.id, 
    pw.orderid, 
    pw.issorderref, 
    po.modelcode, 
    pw.itemid, 
    pe1.eventcode AS STARTEVENTCODE, 
    pe2.eventcode AS ENDEVENTCODE, 
     CASE 
     WHEN pw.enddate < pof.retdate THEN `TO_SERVICE` 
     ELSE `FROM SERVICE` 
     END AS "SERVICE_LEG", 
    pa1.roleid, 
    pad.activitycode, 
    pw.tat, 
    pw.totelapse 
    FROM phwactivitydetail pw 
    JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid 
    JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid 
    JOIN phdobject po ON po.objectwid = pw.objectwid 
    JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid 
    JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid 
    JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid 
    JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid 
    JOIN gldcalendar gc ON gc.datenum = pw.enddatenum 
) a 
where a.SERVICE_LEG="put_condition_here" 
; 
+0

Ok Он может получить доступ как этот. Если мне нужно получить доступ к этому SERVICE_LEG в предложении WHERE в этой таблице. Не из-за стола. После последнего заявления о соединении ... – Toshan

0

Вы можете использовать общее табличное выражение, например.

WITH CTE(countryname,serviceprovideractorwid,id ...., SERVICE_LEG,...) 
AS 
(
SELECT 
pa1.countryname, 
pw.serviceprovideractorwid, 
pa2.id, 
... 
    CASE 
    WHEN pw.enddate < pof.retdate THEN 'TO_SERVICE' 
    ELSE 'FROM SERVICE' 
    END AS "SERVICE_LEG", 
... 
FROM phwactivitydetail pw 
JOIN phdactor pa1 ON pa1.actorwid = pw.orderissactorwid 
JOIN phdactor pa2 ON pa2.actorwid = pw.serviceprovideractorwid 
JOIN phdobject po ON po.objectwid = pw.objectwid 
JOIN phdevent pe1 ON pe1.eventwid = pw.starteventwid 
JOIN phdevent pe2 ON pe2.eventwid = pw.endeventwid 
JOIN phaorderflowcatch pof ON pof.orderdid = pw.orderdid 
JOIN phxactivitydef pad ON pad.activitydefdid = pw.activitydefdid 
JOIN gldcalendar gc ON gc.datenum = pw.enddatenum ) 
SELECT * 
FROM CTE 
WHERE SERVICE_LEG = "your_condition" 
Смежные вопросы