如何使用此代码仅获取一列?

时间:2019-04-12 07:17:58

标签: sql oracle

我有一个名称为产品条形码的表,我想使用executescalar返回一列。我不想返回datatable。尽管如此,我的查询仍会返回行。我只需要条形码。请帮忙!!

我可以通过使用递归选择循环来解决问题,但是我想通过使用partition by解决这个问题。

select BARCODE
      ,PRODUCT_BARCODE_TYPE_CODE
      , ROW_NUMBER() over(partition by PRODUCT_NO order by PRODUCT_BARCODE_TYPE_CODE desc )
  from PRODUCT_BARCODE 
 where PRODUCT_NO='111333666';

我希望这样的输出:

25000111133335555 

它将返回这样的条形码。查询执行

4 个答案:

答案 0 :(得分:0)

 Select BARCODE + PRODUCT_BARCODE_TYPE_CODE + partBarCode
FROM 
(
select BARCODE
      ,PRODUCT_BARCODE_TYPE_CODE
  , ROW_NUMBER() over(partition by PRODUCT_NO order by 
PRODUCT_BARCODE_TYPE_CODE desc ) as partBarCode
from PRODUCT_BARCODE 
where PRODUCT_NO='111333666'
) as res

这假定所有字段的类型均为Nvarchar(),否则它们将按整数进行汇总。

答案 1 :(得分:0)

Select to_char (BARCODE ) || to_char( PRODUCT_BARCODE_TYPE_CODE)  from (
select BARCODE
      ,PRODUCT_BARCODE_TYPE_CODE
      , ROW_NUMBER() over(partition by PRODUCT_NO order by PRODUCT_BARCODE_TYPE_CODE desc ) rn
  from PRODUCT_BARCODE 
 where PRODUCT_NO='111333666'
)
Where rn = 1;

答案 2 :(得分:0)

您可以在下面尝试-

select concat(BARCODE,PRODUCT_BARCODE_TYPE_CODE) as barcode from 
(
select BARCODE
      ,PRODUCT_BARCODE_TYPE_CODE
      , ROW_NUMBER() over(partition by PRODUCT_NO order by PRODUCT_BARCODE_TYPE_CODE desc ) as rn
  from PRODUCT_BARCODE 
 where PRODUCT_NO='111333666'
)A where rn=1

答案 3 :(得分:0)

如果只希望指定产品的barcode行中的product_barcode_type_code,则可以使用last,而无需子查询或显式排名功能:

select max(barcode) keep (dense_rank last order by product_barcode_type_code) as barcode
from product_barcode
where product_no = 111333666;

您可以包含一个partition by子句,但是毫无疑问,因为您仍然要过滤单个product_no

非常快速的演示:

-- CTE for sample data
with product_barcode (product_no, product_barcode_type_code, barcode) as (
  select 111333666, 1, 1234 from dual
  union all select 111333666, 2, 2345 from dual
  union all select 111333666, 3, 25000111133335555  from dual
)
select max(barcode) keep (dense_rank last order by product_barcode_type_code) as barcode
from product_barcode
where product_no = 111333666;

          BARCODE
-----------------
25000111133335555

(我假设您的product_no至少是数字类型而不是字符串,因此省略了您要搜索的文字值周围的单引号;但实际上一个字符串,然后包括那些字符串。.)