1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

distinct count query

Discussion in 'SQL PL/SQL' started by hiswapna, May 4, 2009.

  1. hiswapna

    hiswapna Active Member

    Messages:
    16
    Likes Received:
    0
    Trophy Points:
    80
    how do i write a query which joins 3 tables

    Table A - Serial Number , Contract Nmber

    Table B - Contract Number , Project Number

    Table C - Project Number, Project Code



    Data is as follow

    Code (Text):
    Serial Number , Project Code

       1               A
       1               A
       2               B
       3               B
       4               B
       2               B
       5               C
       6               C
       7               D
       8               D
       8               D
       9               E
       10              F
       10              F
    1 , A are duplicated so this should not be displayed

    B has multiple values 2,3,4 - 2 is repeated so I need the count as 3 instead of 2
    C has two values 5, 6 - so count should be displayed as 2


    Final Output should look like this


    Code (Text):
    Serial Number    Project Code    Count
        2                          B            3
        3                          B            3
        4                          B            3

        5                          C            2
        6                          C            2
     
        7                          D            2
        8                          D            2

        9                          E            1
     
  2. rajavu

    rajavu Forum Guru

    Messages:
    815
    Likes Received:
    52
    Trophy Points:
    610
    Location:
    @ Bangalore , India
    We are not sure about the dependency between you table data.

    Try as follows ...

    Code (SQL):

    SQL> SELECT * FROM PROJECT;

     SERIAL_NO PROJ_CODE
    ---------- ----------
             1 A
             1 A
             2 B
             3 B
             4 B
             2 B
             5 C
             6 C
             7 D
             8 D
             8 D
             9 E
            10 F
            10 F

    14 ROWS selected.

    SQL> SELECT SERIAL_NO,PROJ_CODE,
      2         COUNT(*) OVER (PARTITION BY PROJ_CODE) X,
      3         COUNT(DISTINCT SERIAL_NO) OVER (PARTITION BY PROJ_CODE) Y
      4  FROM PROJECT;

     SERIAL_NO PROJ_CODE           X          Y
    ---------- ---------- ---------- ----------
             1 A                   2          1
             1 A                   2          1
             2 B                   4          3
             2 B                   4          3
             3 B                   4          3
             4 B                   4          3
             5 C                   2          2
             6 C                   2          2
             7 D                   3          2
             8 D                   3          2
             8 D                   3          2
             9 E                   1          1
            10 F                   2          1
            10 F                   2          1

    14 ROWS selected.

    SQL> SELECT  DISTINCT  SERIAL_NO,PROJ_CODE,Y COUNT FROM (
      2      SELECT SERIAL_NO,PROJ_CODE,
      3             COUNT(*) OVER (PARTITION BY PROJ_CODE) X,
      4             COUNT(DISTINCT SERIAL_NO) OVER (PARTITION BY PROJ_CODE) Y
      5      FROM PROJECT)
      6      WHERE  X*y  <> x OR x=y;

     SERIAL_NO PROJ_CODE       COUNT
    ---------- ---------- ----------
             5 C                   2
             3 B                   3
             4 B                   3
             6 C                   2
             7 D                   2
             2 B                   3
             8 D                   2
             9 E                   1

    8 ROWS selected.

    SQL>