нужен sql запрос для создания соединения на одной и той же таблице - PullRequest
0 голосов
/ 25 августа 2009

у меня есть стол lnd_wkly_plan_rx_summary а также цв umns pd_end_dt, nrx_cnt содержащие данные

PD_END_DT    NRX_CNT
12/26/08    1,178.75
12/19/08    2,027.12
12/12/08    1,907.08
12/05/08    2,092.90
11/28/08    1,236.44
11/21/08    1,857.82
11/14/08    1,817.55
11/07/08    1,800.54
10/31/08    1,985.13

i need to put a join on same table lnd_wkly_plan_rx_summary
and compare data of PD_END_DT,NRX_CNT weekly    
so dat i can get difference of NRX_CNT as zero

Финальная таблица будет содержать следующие столбцы

PD_END_DT NRX_CNT DELTA

снимок таблицы

   MKT_ID   PROD_GRP_NBR    CHNL_CD PERIOD_FILE_TYPE    PD_END_DT   NRX_CNT NRX_QTY
    02601   00000020             1  W   10/12/07    2,041.64    9,706.23
    02601   00000020             1  W   10/05/07    2,122.89    10,593.91
    02601   00000020             1  W   09/28/07    2,072.10    10,247.32
    02601   00000020             1  W   09/21/07    2,070.78    10,042.91
    02601   00000020             1  W   09/14/07    2,120.01    10,493.93
    02601       00000020             1  W   09/07/07    1,828.18    8,867.92
    02601   00000020             1  W   08/31/07    2,294.99    11,115.15
    02601   00000020             1  W   08/24/07    2,133.24    10,434.83
    02601     00000020           1  W   08/17/07    2,186.42    10,739.04

CHNL_CD VARIES AS 1 ИЛИ 2 PROD_GRP_NBR 20-200 PERIOD_FILE_TYPE IS W

......... Это только первый шаг к окончательному результату ............

Ответы [ 4 ]

2 голосов
/ 25 августа 2009

Если вы хотите сравнить столбец NRX_CNT с предыдущей неделей, вы можете использовать аналитическую функцию, она будет быстрее и понятнее, чем самообъединение:

SQL>  SELECT pd_end_dt, nrx_cnt,
  2         nrx_cnt - lag(nrx_cnt) over (ORDER BY pd_end_dt) delta
  3    FROM lnd_wkly_plan_rx_summary
  4  ORDER BY pd_end_dt;

PD_END_DT      NRX_CNT      DELTA
----------- ---------- ----------
31/10/2008     1985,13 
07/11/2008     1800,54    -184,59
14/11/2008     1817,55      17,01
21/11/2008     1857,82      40,27
28/11/2008     1236,44    -621,38
05/12/2008      2092,9     856,46
12/12/2008     1907,08    -185,82
19/12/2008     2027,12     120,04
26/12/2008     1178,75    -848,37
1 голос
/ 25 августа 2009

Если вы хотите найти любую комбинацию недель, которые имеют одинаковый NRX_CNT (разница = 0), я бы пошел с чем-то похожим на это:

SELECT * 
FROM lnd_wkly_plan_rx_summary as t1
INNER JOIN lnd_wkly_plan_rx_summary as t2 on t1.nrx_cnt = t2.nrx_cnt
0 голосов
/ 25 августа 2009

что мне здесь не хватает, так это цитате, чтобы присоединиться к столу с самим собой. Во всяком случае - если нет критериев, вы получите для каждого PD_END_DT набор записей для каждой записи в этой таблице, которая показывает разницу Запрос выглядит так: ВЫБЕРИТЕ A.PD_END_DT, A.NRX_CNT, A.NRX_CNT - B.NRX_CNT как DELTA ОТ lnd_wkly_plan_rx_summary A, lnd_wkly_plan_rx_summary B

Я бы хотел, чтобы у вас было "присоединяемое поле" ВЫБЕРИТЕ A.PD_END_DT, A.NRX_CNT, A.NRX_CNT - B.NRX_CNT как DELTA FROM lnd_wkly_plan_rx_summary A ВНУТРЕННЕЕ СОЕДИНЕНИЕ lnd_wkly_plan_rx_summary B ON A.JoinableField = B.JoinableField

0 голосов
/ 25 августа 2009

Какой тип БД вы используете? SQL Server 2005?

выберите A.PD_END_DT в качестве «LAST_PD_END_DT», A.NRX_CNT - B.NRX_CNT в качестве «DELTA» из lnd_wkly_plan_rx_summary как A внутреннее соединение lnd_wkly_plan_rx_summary как B A.PD_END_DT = dateadd (д, 7, B.PD_END_DT)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...