У меня есть список избранного, например:
Пример данных
| key | item_id | list_name | customer_id |meta |
|-----|---------|-----------|--------------|---------------|
| 1 | A-11 | aa11 | 001 | unique-data-1 |
| 2 | A-11 | bb22 | 001 | unique-data-2 |
| 3 | A-26 | cc33 | 001 | unique-data-3 |
| 4 | A-28 | aa11 | 002 | unique-data-4 |
| 5 | J-52 | aa11 | 001 | unique-data-5 |
| 6 | X-53 | aa11 | 001 | unique-data-6 |
Желаемый вывод
для @item_id nvarchar(20) = 'A-11'
| key | isFavorited | list_name | meta |
|-----|-------------|-----------|---------------|
| 1 | Y | aa11 | unique-data-1 |
| 2 | Y | bb22 | unique-data-2 |
| 3 | N | cc33 | unique-data-3 |
И хотел бы вернуть выбор всех доступных списков, а также то, является ли определенный элемент частью этого списка, с его метаданными.
declare @item_id nvarchar(20) = 'A-11'
declare @customer_id nvarchar(20) = 001
select
[key],
[isFavorited] = max(case when [item_id] = @item_id then 'Y' else 'N' end)
[list_name]
[meta]
from favorites
where customer_id = @customer_id
group by [list_name], [key], [meta]
Проблемы при попытке различных методов:
Проблема, с которой я сталкиваюсь, заключается в том, что, поскольку meta
уникальна, группа уничтожает уникальность выбора.
Крест применяется, как показано ниже, не применяется правильный meta
на основе соответствующего key
.
cross apply (
select top 1
[meta]
from favorites
where customer_id = @customer_id
)
При выборе по номеру строки фактическое key
, к которому необходимо присоединиться, теряется, поэтому я не могу присоединиться к meta
.
"noRow" = row_number() over(order by h_po_no asc)
I ' хотел бы
- передать
item_id
и customer_id
- вернуть все списки для этого клиента
- Получить статус избранного для каждого списка прошло в
item_id
- Это em помечается как избранный, если он соответствует
list_name
и item_id
для данного customer_id
- Получить первичные строки
key
и meta
data
Как я могу вернуть отдельный выбор list_name
, isFavorite
статуса, key
, и это meta
?