Tsql 确定值大于0的列的计数

Tsql 确定值大于0的列的计数,tsql,subquery,aggregate,common-table-expression,having,Tsql,Subquery,Aggregate,Common Table Expression,Having,好的,小伙子们/姑娘们 以下是我的结果集: 这是我想要的最终结果集 为了实现这个结果,我目前正在使用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)

好的,小伙子们/姑娘们

以下是我的结果集:

这是我想要的最终结果集

为了实现这个结果,我目前正在使用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
子句,但这意味着我需要使用适当的
groupby谓词
。。。这就是我被困的地方

下面是一些我尝试过的例子

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

。。。最后,如果我将
s更改为
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

只需在查询中使用一些CASE语句即可


选择总和(
案例
当产品ID>0时
那么1
其他0
结束
)作为产品标识,
总数(
案例
当数字文档ID>0时
那么1
其他0
结束
)作为数字文档ID,
总数(
案例
当QR_代码\u ID>0时
那么1
其他0
结束
)作为QR\U代码\U ID
来自sl_建议的_资产
其中USER_ID=436


祝你今天愉快

只需在查询中使用一些CASE语句即可


选择总和(
案例
当产品ID>0时
那么1
其他0
结束
)作为产品标识,
总数(
案例
当数字文档ID>0时
那么1
其他0
结束
)作为数字文档ID,
总数(
案例
当QR_代码\u ID>0时
那么1
其他0
结束
)作为QR\U代码\U ID
来自sl_建议的_资产
其中USER_ID=436

祝你今天愉快

case
表达式。或
case
表达式。