SQL Server - 计算类似的值&用SUM来得到总数?

时间:2016-08-15 18:59:10

标签: sql-server sql-server-2012

我正在尝试编写一个查询来检索值或类似值的总计数。

我知道这应该是相当简单的,但我今天心不在焉。

例如,我的表格是这样的:

CustName:        Acct #:    FavColor:

Mr Johnson       12345      Red
Barry Johnson    86749      Dark Red
Mike Johnson     90462      Blue
Ms Smith         85693      Light Blue

该表在“FavColor”列中有多种颜色“红色”。那可能是“浅红色”,“暗红色”,“红色”等等。

我只需要知道喜欢任何“红色”阴影的顾客总数。

无论我如何编写这个简单的查询,计数仍然将每条记录分成一个单独的行,每行的计数为“1”。

所以,如果我运行以下查询:

Select 
    CustName, CustAcct, FavColor, 
    count(case when FavColor like '%Red%' then 1 end) AS [Total_Red],
    count(case when FavColor like '%Blue%' then 1 end) AS [Total_Blue]
From 
    CustTable
Group by 
    CustName, CustAcct, FavColor

我得到以下结果:

CustName:        Acct #: |  FavColor:   [Total_Red]  [Total_Blue]  
Mr Johnson       12345      Red              1
Barry Johnson    86749      Dark Red         1
Mike Johnson     90462      Blue                           1
Ms Smith         85693      Light Blue                     1

我需要结果将[Total_Red]列值显示为“2”,因为有两位客户喜欢红色。

提前谢谢!

使用SQL Server 2012

2 个答案:

答案 0 :(得分:1)

您的问题是分组。它正在被客户打破。如果您只需要颜色的总数,那么您可以运行类似下面的查询。这将返回喜欢每种颜色的总客户。

SELECT 
    SUM(CASE WHEN FavColor LIKE '%Red%' THEN 1 ELSE 0 END) AS 'Total_Red',
    SUM(CASE WHEN FavColor LIKE '%Blue%' THEN 1 ELSE 0 END) AS 'Total_Blue'
FROM
    CustTable

答案 1 :(得分:0)

;With cte
as
( 
select 
sum(case when FavColor like '%Red%' then 1 end) AS [Total_Red],
sum(case when FavColor like '%Blue%' then 1 end) AS [Total_Blue],
CustName, CustAcct
from 
table t2
group by CustName, CustAcct
)
select 
c.total_red,c.total_blue, t1.CustName, t1.CustAcct, t1.FavColor
from
cte t1
join
table t2
on 
t1.CustName=t2.CustName
t2.CustAcct=t1.CustAcct