sql怎么写

dust_dust 2013-11-27 11:34:22
table1
col1 col2 col3 col4
111 222 333 -5
112 222 334 5
113 222 335 5
111 223 336 5
111 223 333 -5
111 223 333 15

我要找出这样的行,先选出col4<0的行
table2
111 222 333 -5
111 223 333 -5
然后从table1找到table1.col2=table2.col2 and table1.col4=-table2.col4的行
table3
112 222 334 5
113 222 335 5
111 223 336 5
然后将table3中col2 col4均相同的剔除到只剩一个
112 222 334 5
111 223 336 5
这个就是我要的结果,求指教sql怎么写
...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你的table3是怎么生成的
dust_dust 2013-11-27
  • 打赏
  • 举报
回复
补充一下要求, 如果是有三个-5,就得找到三个5 table1 col1 col2 col3 col4 110 222 333 -5 111 222 333 -5 112 222 334 5 113 222 335 5 111 223 336 5 111 223 333 -5 111 223 333 15 所以最后一步并不是简单的distinct
CT_LXL 2013-11-27
  • 打赏
  • 举报
回复
引用 5 楼 z_shousi 的回复:
#3的sql,col1和col3不是楼主想要的结果、
table3 112 222 334 5 113 222 335 5 111 223 336 5 然后将table3中col2 col4均相同的剔除到只剩一个 112 222 334 5 111 223 336 5 其实我觉得楼主不是很在乎col1和col3的值,如果在乎,像上面这种情况应该保留哪条呢?
  • 打赏
  • 举报
回复
#3的sql,col1和col3不是楼主想要的结果、
  • 打赏
  • 举报
回复
引用 1 楼 shaode0101 的回复:
补充一下要求, 如果是有三个-5,就得找到三个5 table1 col1 col2 col3 col4 110 222 333 -5 111 222 333 -5 112 222 334 5 113 222 335 5 111 223 336 5 111 223 333 -5 111 223 333 15 所以最后一步并不是简单的distinct
没有看懂你这个是什么意思、 但是按照你题目写了下

SELECT T3.COL1, T3.COL2, T3.COL3, T3.COL4
  FROM (SELECT T.*,
               ROW_NUMBER() OVER(PARTITION BY T.COL2, T.COL4 ORDER BY T.COL1) AS RN
          FROM TABLE1 T
         INNER JOIN (SELECT DISTINCT S.COL2, S.COL4
                      FROM TABLE1 S
                     WHERE S.COL4 < 0) T2
            ON T.COL2 = T2.COL2
           AND T.COL4 = -T2.COL4) T3
 WHERE T3.RN = 1
CT_LXL 2013-11-27
  • 打赏
  • 举报
回复
SELECT T1.COL1, T1.COL2, T1.COL,-t1.col4 FROM (SELECT * FROM TABLE1 T WHERE T.COL4 < 0) T1, (SELECT DISTINCT T.COL2, T, COL4, TABLE1) T2 WHERE T1.COL2 = T2.COL2 AND T1.COL4 = -T2.COL4

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧