SQL计数结果

时间:2017-10-04 18:17:40

标签: sql

select distinct
LsPO AS 'PO Listed',
LsSuID AS 'Supplier ID',
LSShipSpeed AS 'Ship Speed',
count('PO Listed') as 'PO Count'
From csn_order..TblLoadShipping
where 
datalength(LSPO) = '10' 
and LsDateLoaded >= DATEADD(day,-1, GETDATE())
and lspo like 'CS%'
and lsshipspeed is not null
group by lspo, lssuid, lsshipspeed
order by 'PO Listed' desc

在PO列出中,我获得了一次PO,但PO Count列仍然给出了141的结果,计算了PO在where或不同过滤器之前的实例数。

也许我完全以错误的方式解决这个问题。

以下是一些结果:

CS89980125  14347   153 1
CS89980122  22471   1   1
CS89980113  420 153 1
CS89980113  420 GR  1

我喜欢最后一列,即计数,以表示CS89980113出现两次

1 个答案:

答案 0 :(得分:1)

如果您想要列的非空值数,可以使用

select count(your_col1)
from your_table 

如果您需要列的非空值的相对计数,则可以使用

第二列
select your_col2, count(your_col1)
from your_table 
group by your_col2

如果您在计数中使用的同一列中使用分组,则根本不会得到一个分组..

如果您需要计算不同的值,可以在count(distinct your_col1)函数

中添加distinct

基于您的示例,您不能在select子句中使用别名,因此您无法使用

count('PO Listed') as 'PO Count' 

但你应该使用

  count(LsPO ) as 'PO Count'

并且对于不同的值,您应该使用

   count(distinct LsPO ) as 'PO Count'