【问题标题】:Row_Number where row = 1 not workingRow_Number where row = 1 不起作用
【发布时间】:2017-10-30 19:46:25
【问题描述】:

我有这个选择语句:

SELECT MODATA.CITEM, MODATA.QTREQ, MODATA.UNMSR, MODATA.CDESC, MODATA.USRSQ, SLQNTY.LLOCN, SLQNTY.LQNTY, ROW_NUMBER() OVER (PARTITION BY CITEM ORDER By CITEM) as tr
FROM MODATA
LEFT OUTER JOIN SLQNTY ON SLQNTY.ITNBR = MODATA.CITEM
WHERE MODATA.ORDNO = 'M123456' AND SLQNTY.LQNTY >= '0'
ORDER BY MODATA.USRSQ, MODATA.CITEM

这拉动了:

我只想显示 = 1 的 TR...我尝试将此添加到我的 Where 子句 TR = '1' 或 TR = 1... 它说找不到该列?为什么会这样?我该如何解决?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql row-number


【解决方案1】:

您需要使用子查询:

SELECT MS.*
FROM (SELECT MODATA.CITEM, MODATA.QTREQ, MODATA.UNMSR, MODATA.CDESC, MODATA.USRSQ, SLQNTY.LLOCN, SLQNTY.LQNTY,
             ROW_NUMBER() OVER (PARTITION BY CITEM ORDER By CITEM) as tr
      FROM MODATA JOIN
           SLQNTY
           ON SLQNTY.ITNBR = MODATA.CITEM
      WHERE MODATA.ORDNO = 'M123456' AND SLQNTY.LQNTY >= 0
     ) MS
WHERE tr = 1
ORDER BY MODATA.USRSQ, MODATA.CITEM

您的WHERE 子句将外连接变为内连接,因此我只是通过使用正确的join 类型使查询更清晰。我还删除了'0' 中的单引号,因为我猜该列是一个数字。

【讨论】:

  • 像梦一样工作......不知道为什么我没有想到......谢谢戈登!
【解决方案2】:

必须像上面所说的那样做一个子查询......

SELECT * From(
SELECT MODATA.CITEM, MODATA.QTREQ, MODATA.UNMSR, MODATA.CDESC, MODATA.USRSQ, SLQNTY.LLOCN, SLQNTY.LQNTY, ROW_NUMBER() OVER (PARTITION BY CITEM ORDER By CITEM) as L
FROM MODATA
LEFT OUTER JOIN SLQNTY ON SLQNTY.ITNBR = MODATA.CITEM
WHERE MODATA.ORDNO = 'M325040' AND SLQNTY.LQNTY >= '0'
ORDER BY MODATA.USRSQ, MODATA.CITEM) AS X
WHERE X.L = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2016-02-26
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多