Хорошо, ребята / девочки ...
Вот мой набор результатов:
и вот окончательный набор результатов, который я хочу
для достижения результата, в настоящее время я использую n (3) подзапросов ... что не идеально ...
declare @userId int = 436
select
(select count(PRODUCT_ID) from sl_suggested_asset where PRODUCT_ID > 0 and user_id = @userId) As 'PRODUCT_ID',
(select count(DIGI_DOC_ID) from sl_suggested_asset where DIGI_DOC_ID > 0 and user_id = @userId) As 'DIGI_DOC_ID',
(select count(QR_CODE_ID) from sl_suggested_asset where qr_code_id > 0 and user_id = @userId) As 'QR_CODE_ID'
я хотел бы использовать cte
или aggregate
...
вот что я думал ...
select count(product_id), count(DIGI_DOC_ID), count(qr_code_id), user_id
from sl_suggested_asset
where user_id = 436
group by user_id
но это дает мне общее количество строк ...
, поэтому мое предложение having
должно использоваться, но это означает, что мне нужно иметь правильное group by predicate
... вот где яя застрял ...
вот несколько примеров того, что я пробовал ...
select
count(PRODUCT_ID) As 'PRODUCT_ID'
, count(DIGI_DOC_ID) As 'DIGI_DOC_ID'
, count(QR_CODE_ID) As 'QR_CODE_ID'
, user_id
from sl_suggested_asset
where
PRODUCT_ID > 0
or
DIGI_DOC_ID > 0
or
QR_CODE_ID > 0
and
user_id = 436
group by user_id
и я получаю ...
... здесь я меняю порядок условий условия where
...
select
count(PRODUCT_ID) As 'PRODUCT_ID'
, count(DIGI_DOC_ID) As 'DIGI_DOC_ID'
, count(QR_CODE_ID) As 'QR_CODE_ID'
, user_id
from sl_suggested_asset
where
user_id = 436
and
PRODUCT_ID > 0
or
DIGI_DOC_ID > 0
or
QR_CODE_ID > 0
group by user_id
... и получаю тот же результат, что и выше...
... теперь я изменяю предложение where
на = 0
и получаю тот же результат, что означает, что предложение where
полностью игнорируется ...
select
count(PRODUCT_ID) As 'PRODUCT_ID'
, count(DIGI_DOC_ID) As 'DIGI_DOC_ID'
, count(QR_CODE_ID) As 'QR_CODE_ID'
, user_id
from sl_suggested_asset
where
user_id = 436
and
PRODUCT_ID = 0
or
DIGI_DOC_ID = 0
or
QR_CODE_ID = 0
group by user_id
... наконец, если изменить or
s на and
s, я получу нулевой результат ...
select
count(PRODUCT_ID) As 'PRODUCT_ID'
, count(DIGI_DOC_ID) As 'DIGI_DOC_ID'
, count(QR_CODE_ID) As 'QR_CODE_ID'
, user_id
from sl_suggested_asset
where
user_id = 436
and
PRODUCT_ID = 0
and
DIGI_DOC_ID = 0
and
QR_CODE_ID = 0
group by user_id