2016-08-24 3 views
0

ich diese Abfrage bin mitWie kann ich das Datum zu ändern

SELECT 
    A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, A.ATT_DATE, 
    CASE 
     WHEN B.EMP_NO IS NULL 
      THEN 'A' 
      ELSE 'P' 
    END PRESENT_STATUS 
FROM 
    (SELECT 
     A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, 
     B.ATT_DATE 
    FROM 
     EMPLOYEES A, 
     (SELECT 
       TO_DATE(:P_FROM_DATE) + LEVEL ATT_DATE 
      FROM DUAL 
      CONNECT BY LEVEL <= TO_DATE(:P_TO_DATE) - TO_DATE(:P_FROM_DATE)) B 
    WHERE 
     TRIM(TO_CHAR(B.ATT_DATE, 'DAY')) <> 'SUNDAY') A, 
     (SELECT EMP_NO, EMP_NAME, DEPARTMENT_NAME, TRUNC(TIME_STAMP) ATT_DATE 
     FROM EMP22 
     GROUP BY EMP_NO, EMP_NAME, DEPARTMENT_NAME, TRUNC(TIME_STAMP)) B 
WHERE A.EMP_NO = B.EMP_NO(+) AND A.ATT_DATE = B.ATT_DATE(+) 
GROUP BY A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, A.ATT_DATE, B.EMP_NO 

Abfrageergebnis wie dieses

ist
| EMP_Name | emp_NO | Department_name | 2013-06-01 | 2013-06-02 | 2013-06-03 | 2013-06-04 | 2013-06-05 | 
| Naren |  1 |   22 |   A |  A |   A |   A |   P |   
| Srinu |  2 |   22 |   P |  P |   P |   P |   P |   
| Blah |  3 |   22 |   A |  P |   P |   P |   P | 

ich führen müssen, wie dieses Datum wie diese

| EMP_Name | emp_NO | Department_name | 01 | 02 | 03 |04 | 05 | 
| Naren |   1 |      22 |    A | A | A | A | P |   
| Srinu |   2 |      22 |    P | P | P | P | P |   
| Blah |    3 |      22 |     A | P | P | P | P | 

sein sollte, können Sie helfen mir bitte meine Anfrage zu ändern

+4

Diese Abfrage erzeugt diese Ausgabe nicht. Ist das nur ein Teil von dem, was du läufst? –

+0

Wie Alex sagt, stimmt diese Ausgabe nicht mit dieser Abfrage überein. Ich würde auch bemerken, dass Spaltennamen beliebig mit Alias ​​versehen werden können, ohne die Abfragelogik zu ändern. –

+0

[Schlechte Angewohnheiten zu treten: Verwenden von alten JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - diese alte * durch Kommas getrennte Liste von Tabellen * style wurde durch die * richtige * ANSI 'JOIN'-Syntax im ANSI - ** 92 ** SQL Standard ersetzt (** vor mehr als 20 Jahren **) und seine Verwendung wird davon abgeraten –

Antwort

1

T ry this:

SELECT 
    A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, to_char(A.ATT_DATE, 'dd'), 
    CASE 
     WHEN B.EMP_NO IS NULL 
      THEN 'A' 
      ELSE 'P' 
    END PRESENT_STATUS 
FROM 
    (SELECT 
     A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, 
     B.ATT_DATE 
    FROM 
     EMPLOYEES A, 
     (SELECT 
       TO_DATE(:P_FROM_DATE) + LEVEL ATT_DATE 
      FROM DUAL 
      CONNECT BY LEVEL <= TO_DATE(:P_TO_DATE) - TO_DATE(:P_FROM_DATE)) B 
    WHERE 
     TRIM(TO_CHAR(B.ATT_DATE, 'DAY')) <> 'SUNDAY') A, 
     (SELECT EMP_NO, EMP_NAME, DEPARTMENT_NAME, TRUNC(TIME_STAMP) ATT_DATE 
     FROM EMP22 
     GROUP BY EMP_NO, EMP_NAME, DEPARTMENT_NAME, TRUNC(TIME_STAMP)) B 
WHERE A.EMP_NO = B.EMP_NO(+) AND A.ATT_DATE = B.ATT_DATE(+) 
GROUP BY A.EMP_NO, A.EMP_NAME, A.DEPARTMENT_NAME, A.ATT_DATE, B.EMP_NO 
Verwandte Themen