需要sql查询在同一个表上创建连接

时间:2009-08-25 10:30:29

标签: sql oracle

我有一张桌子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是W

.........这只是获得最终结果的第一步............

4 个答案:

答案 0 :(得分:2)

如果您想将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 :(得分:1)

如果你想找到具有相同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

答案 2 :(得分:0)

您使用的是哪种数据库类型? 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(d,7,B.PD_END_DT)

答案 3 :(得分:0)

我在这里缺少的是一个加入桌子的citeriea。 无论如何 - 如果没有标准,你会得到 对于每个PD_END_DT,该表中每条记录的一组记录显示差异 查询如下所示: SELECT 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

我会看到一个“可加入的字段” SELECT 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 ON A.JoinableField = B.JoinableField