Как получить только один столбец с этим кодом? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть таблица, именем которой является штрих-код продукта, и я хочу вернуть один столбец с помощью executetescalar. Я не хочу возвращать datatable. Тем не менее, мой запрос возвращает строки. Мне просто нужен штрих-код. Пожалуйста, помогите !!

Я могу выяснить проблему с помощью рекурсивного цикла выбора, но я хочу решить эту проблему с помощью разбиения по.

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 голосов
/ 12 апреля 2019

Если вам нужно только 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, по крайней мере, является числовым типом, а не строкой, и поэтому пропустил одинарные кавычки, которые были у вас вокруг искомого литерального значения; но если это на самом деле строка, то включите теконечно ..)

0 голосов
/ 12 апреля 2019
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;
0 голосов
/ 12 апреля 2019

Вы можете попробовать ниже -

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
0 голосов
/ 12 апреля 2019
 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 (), иначе они будут суммированы по целому числу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...