我有一个名称为产品条形码的表,我想使用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
它将返回这样的条形码。查询执行
答案 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
至少是数字类型而不是字符串,因此省略了您要搜索的文字值周围的单引号;但实际上一个字符串,然后包括那些字符串。.)